1

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

以上是有效的sql语句吗?

4

5 回答 5

4

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

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

于 2012-08-06T22:03:44.673 回答
2

如果您包含表名,我猜您是在询问是否可以按未选择的元素 c 分组。是的你可以。

于 2012-08-06T22:08:09.763 回答
2

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

查询

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

执行以下操作:

  • 将源表中的行分组到不同的组中,每个列的唯一组合a1bc.
  • 然后将每个这样的组折叠成一行,其中包含分组列和查询所需的任何所需聚合函数的值。
  • 然后将生成的结果集返回给调用者,丢弃任何不需要的列(在本例中为 column 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

所以,不一定有用。

于 2012-08-06T23:22:15.837 回答
1

不——你需要一张桌子。

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

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

于 2012-08-06T22:04:03.043 回答
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

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

于 2012-08-06T22:08:05.373 回答