首页 > 解决方案 > Oracle 问题分组

问题描述

我知道很多人都会问这个问题。但我仍然无法弄清楚为什么会这样。无法理解这个逻辑。

我有一个带有列的表idmytesttablecompany_nameemployee_name.

我试图让员工详细信息根据公司名称对它们进行分组。所以我使用了以下查询:

select * 
from mytesttable 
group by company_name;

但我得到以下问题:

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 28 Column: 2

现在我尝试将 count(1) 与我的列一起放在 select 中,尝试使用 2 列进行分组等。仍然是同样的问题。谁能解释我如何实现这一目标?

因为这是一个简单的group by。逻辑似乎是正确的,但想知道为什么它没有让我得到结果。

标签: sqloracle

解决方案


您的查询是:

select *
from mytesttable
group by company_name;

*扩展到所有列。所以这变成:

select company_name, col1, col2, col3, . . .  -- your question doesn't specify the column names
from mytesttable
group by company_name;

当您指定 时,您指定结果集中group by每行有一行。company_name其他列通常用聚合函数填充,例如MIN()SUM()LISTAGG()

应该选择什么值col1?一般来说,SQL 不会试图回答这个问题。相反,它返回一个语法错误。这不是 Oracle 特定的。这是语言的定义。

你可能想要的是:

select company_name, count(*) as num_employees
from mytesttable
group by company_name;

推荐阅读