了解GROUP BY子句

时间:2012-08-06 22:02:24

标签: mysql sql oracle

SELECT a,b from <table_name> GROUP BY a,b,c

上面是一个有效的sql语句吗?

5 个答案:

答案 0 :(得分:4)

不是没有表名,它不是。如果它有一个表名,它将是有效的,但可能不是很有用。

通常会将GROUP BY子句与某些聚合函数(SUM,COUNT,MAX,MIN等)结合使用,以导出与分组字段相关的一些值。

答案 1 :(得分:2)

如果你包含一个表名,我猜你是否可以通过一个未选择的元素c进行分组。是的,你可以。

答案 2 :(得分:1)

不 - 你需要一张桌子。

SELECT a,b FROM myTable GROUP BY a,b,c

其中myTable是您选择的表(必须包含a,b和c列)。

答案 3 :(得分:0)

否 - 因为您没有指定表名。如果你有,那么是的,它肯定对mysql有效,不确定Oracle(它以非常不同的方式验证GROUPing)。但它没有任何意义......

a  b  c
0  0  0
0  0  1
0  1  0
0  1  1

将查询应用于上表将给出:

0 0 
0 0
0 1
0 1

我不知道这将是一个有意义的结果 - 如果你不想要一个聚合值,那么DISTINCT更有意义 - 但会给出不同的结果:

SELECT DISTINCT a, FROM `atable` 

0 0
0 1

也许如果你解释了你提出这个问题的真正原因,我们可以更明智地尝试回答它。

答案 4 :(得分:0)

是的,该查询是合法的SQL。是否有用 SQL完全是另一回事。

查询

select a , b
from foo
group by a,b,c

以下内容:

  • 将源表中的行分组为不同的组,每列abc的唯一组合为1。
  • 然后将每个此类组折叠为一行,其中包含分组列以及查询所需的任何所需聚合函数的值。
  • 然后将结果集返回给调用者,抛出任何不需要的列(在本例中为c列)。

由于其中一个分组列被丢弃,因此不能保证指定的查询是一组唯一行。它可能包含重复项。例如,如果group by想要返回这些组:

A  B  C
-  -  -
0  0  0
0  0  1
0  1  0
0  1  1
1  0  0
1  0  1
1  1  0
1  1  1

查询返回的结果集为

A  B
-  -
0  0
0  0
0  1
0  1
1  0
1  0
1  1
1  1

所以,不一定有用。