GROUP BY
仅用于聚合函数吗?
任何人都可以给出一个不与聚合函数一起使用的例子。
答案 0 :(得分:7)
使用GROUP BY的SELECT可以用作SELECT DISTINCT的替代方法。 Pranay Rana的例子基本上等同于
SELECT DISTINCT UserName, Departmentid FROM user
如果你想要一个例子,其中GROUP BY优先于DISTINCT是合理的,这里是一个。比如,您想要返回仅在表中出现一次的项目:
SELECT Item
FROM atable
GROUP BY Item
HAVING COUNT(*) = 1
如您所见,查询仅返回非聚合列。
它仍然使用聚合函数,即使不在SELECT子句中也是如此。 可能是您必须首选GROUP BY到DISTINCT而不需要在所有上使用聚合函数的情况,但此时我必须是特定于平台的。< / p>
特别是,如果您使用的是SQL Server,您会发现以下两个语句的结果之间存在差异: #1: #2: (如果不是,您仍然可以使用Stack Exchange Data Explorer查看自己的结果。) 这两个陈述都是为了返回排名的不同项目。但是,只有第一个语句(使用GROUP BY)按预期返回结果,而后者(使用DISTINCT)返回所有项。 WITH data (f) AS (
SELECT 'abc' UNION ALL
SELECT 'def' UNION ALL
SELECT 'abc'
)
SELECT f, ROW_NUMBER() OVER (ORDER BY f) FROM data GROUP BY f
WITH data (f) AS (
SELECT 'abc' UNION ALL
SELECT 'def' UNION ALL
SELECT 'abc'
)
SELECT DISTINCT f, ROW_NUMBER() OVER (ORDER BY f) FROM data
显然,SQL Server中的排名函数是在GROUP BY之后,但在DISTINCT 之前评估的原因是,SELECT子句in SQL Server在GROUP BY之后,但在DISTINCT之前评估,这使你更喜欢GROUP在这种情况下通过DISTINCT。 (感谢@ypercube在正确的方向上推动我。)
答案 1 :(得分:4)
我没有应用任何聚合函数的东西
Select City,State from geodata group by City,State