kingbase数据库分组查询时,GROUP BY字段如果为主键,则查询的列不需要都里包含在GROUP BY中,否则需要。
GROUP BY
子句被用来把表中在所列出的列上具有相同值的行分组在一起。 这些列的列出顺序并没有什么关系。其效果是把每组具有相同值的行组合为一个组行,它代表该组里的所有行。 这样就可以删除输出里的重复和/或计算应用于这些组的聚集。例如
=> SELECT * FROM test1; x | y ---+--- a | 3 c | 2 b | 5 a | 1 (4 rows) => SELECT x FROM test1 GROUP BY x; x --- a b c (3 rows)
在第二个查询里,不能写成SELECT * FROM test1 GROUP BY x
,因为列y
里没有哪个值可以和每个组相关联起来。被分组的列可以在选择列表中引用是因为它们在每个组都有单一的值。
通常,如果一个表被分了组,那么没有在GROUP BY
中列出的列都不能被引用,除非在聚集表达式中被引用。 一个用聚集表达式的例子是:
=> SELECT x, sum(y) FROM test1 GROUP BY x; x | sum ---+----- a | 4 b | 5 c | 2 (3 rows)
这里的sum
是一个聚集函数,它在整个组上计算出一个单一值。有关可用的聚集函数的更多信息可以在