我正在努力学习Group By和Having但我似乎无法理解这里发生的事情。我使用了w3shools SQL Tryit Editor。
我创建的表是:
gradle -PscalaTests ..
我使用的查询:
name age country
------------------------
Sara 17 America
David 21 America
Jared 27 America
Jane 54 Canada
Rob 32 Canada
Matthew 62 Canada
我希望查询按国家/地区对信息进行分类,并使用年龄> 25过滤器来创建结果,但这里是输出:
select
sum(age), country
from
NewTable
group by
country
having
age>25;
发生什么事了?!结果是所有年龄段的美国和加拿大人的总和。
答案 0 :(得分:1)
您遗失的内容特定于having
关键字。在查询中使用has子句将在分组发生后应用于数据集。
听起来您希望在分组发生之前将年龄小于25的记录从查询中排除。但是,它的运作方式是,有条款排除了每个总数超过25的总年龄。
如果要在总计年龄总和之前排除个别记录,可以执行以下操作(使用在分组之前应用的where
子句):
select sum(age), country from NewTable where age > 25 group by country;
答案 1 :(得分:0)
where
子句列出了哪些行参与结果的条件。
having
子句类似于where
,但会为分组(或聚合)值参与结果提供条件。
要么尝试这个:
select sum(age), country
from NewTable
where age > 25 -- where puts condition on raw rows
group by country
或这个:
select sum(age), country
from NewTable
group by country
having sum(age) > 25 -- having puts a condition on groups
取决于您尝试做什么。