在SQL中分组和使用的麻烦

时间:2018-02-15 16:33:03

标签: mysql sql database database-design

我正在努力学习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;

发生什么事了?!结果是所有年龄段的美国和加拿大人的总和。

2 个答案:

答案 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

取决于您尝试做什么。