【发布时间】:2017-10-10 17:23:09
【问题描述】:
我在 Oracle 数据库中有一个表,它有 40 列。 我知道如果我想进行 group by 查询,select 中的所有列都必须在 group by 中。
我只是想做:
select col1, col2, col3, col4, col5 from table group by col3
如果我尝试:
select col1, col2, col3, col4, col5 from table group by col1, col2, col3, col4, col5
它没有给出所需的输出。
我已经搜索过这个,但没有找到任何解决方案。我使用某种 Add() 或 count(*) 函数找到的所有查询。
在 Oracle 中不能简单地按一列分组吗?
更新:
抱歉,不够清楚。
我的桌子:
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 1 | 1 | some text 1 | 100 |
| 2 | 1 | some text 1 | 200 |
| 3 | 2 | some text 1 | 200 |
| 4 | 3 | some text 1 | 78 |
| 5 | 4 | some text 1 | 65 |
| 6 | 5 | some text 1 | 101 |
| 7 | 5 | some text 1 | 200 |
| 8 | 1 | some text 1 | 200 |
| 9 | 6 | some text 1 | 202 |
+--------+----------+-------------+-------+
并通过运行以下查询:
select col1, col2, col3 from table where col3='200' group by col1;
我将得到以下所需的输出:
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 |
| 3 | 2 | some text 1 | 200 |
| 7 | 5 | some text 1 | 200 |
+--------+----------+-------------+-------+
【问题讨论】:
-
你不能这样分组。你需要什么?也许如果您分享一些示例数据/输出,我们可以提供帮助
-
order by而不是group by?select col1, col2, col3, col4, col5 from table order by col3不,当您有多个列时,您不能按单个列分组。想想看。如果我们在第一行有 a,b,c,在第 2 行有 x,y,c。并且我们只按第 3 列分组......系统应该为第 1 列和第 2 列选择什么? a 还是 x? b 还是 y?系统无法为您决定这就是它无效的原因。 (但如果您更改设置,则在 mySQL 的顺序版本和当前版本中有效) -
简单地说,在大多数 RDBMS 引擎中,没有聚合的 group by 是没有意义的,因为聚合的行数必须从原始集合中减少,并且 group by 解释了聚合的级别应该发生。当您有重复的记录并且您需要删除重复的记录时,DISTINCT 是有意义的。它可以选择 a 或者它可以选择 x,并且它可以根据一次执行到下一次执行而有所不同。这就是为什么大多数引擎不扩展组的原因