SQL group by、where和having语句用法

SQL 语句中的 GROUP BY 子句用于将具有相同值的行分组在一起,通常与聚合函数(如 COUNT、SUM、AVG 等)一起使用。WHERE 子句用于筛选符合条件的行。HAVING 子句则在分组后对分组结果进行进一步筛选。
以下是一个使用 SQL 语句中的 GROUP BY、WHERE 和 HAVING 子句的示例:

SELECT   
    column1,  
    COUNT(column2) AS count_column2  
FROM  
    table_name  
WHERE  
    column1 > 100  
GROUP BY  
    column1  
HAVING  
    COUNT(column2) > 5;  

在这个示例中,我们首先根据 column1 列对数据进行分组。然后,我们使用 COUNT(column2) 函数计算每个分组中 column2 列的行数。最后,我们使用 HAVING 子句筛选出 column2 列行数大于 5 的分组。
这个查询将返回一个结果集,其中包含 column1 列的值以及每个分组中 column2 列的行数。对于 column1 列中值大于 100 的行,结果集将仅包含那些 column2 列行数大于 5 的分组。

说明:

1.where、having、group by、order by的顺序是:where -> group by -> having -> order by

2. GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前. HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)

3.除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。count()为聚集函数,vend_id在后面groupby中有,所以select后面有。

select vend_id, count(*) , sales from products group by vend_id;

这个语句,其中sales字段,在group by中没有,所以查询的结果,sales的值是错误的!!!(切记)

如果想用分组后的,sales的字段,可以采用left join的方式,相当于两个表匹配的方式,查询:(原始表B)

select vend_id, sales from B left join (select vend_id, count(*) nums, min(sales) sales from products group by vend_id) as A on B.vend_id = A.vend_id WHERE.......

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL 中,Group By 语句是用来根据一定的规则将一个数据集划分成若干个小的区域,然后针对这些小区域进行数据处理的。通过 Group By 子句可以对结果集中的数据进行分组,并且可以结合聚合函数使用,如求平均值、求和等。而 Having 子句则是在 Group By 子句之后使用的,用于筛选分组后的结果集中的数据。 具体的使用方法如下: 1. Group By 语句用法:在 SQL 查询语句中,通过 Group By 子句后面跟上需要分组的列名,可以按照这些列的值进行分组。例如,可以使用以下语句对表中的数据按照某个字段进行分组: SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name; 2. Having 语句用法:在 Group By 语句之后使用 Having 子句可以对分组后的结果进行筛选,只输出满足条件的分组结果。例如,可以使用以下语句查找平均成绩大于某个值的学生: SELECT sno, AVG(grade) FROM sc GROUP BY sno HAVING AVG(grade) > 80; 需要注意的是,Where 子句和 Having 子句的作用对象不同。Where 子句作用于表和视图,用于在分组和聚集计算之前选取输入行;而 Having 子句作用于分组结果,用于在分组和聚集之后选取满足条件的分组行。因此,Where 子句不能包含聚合函数,而 Having 子句总是包含聚合函数。 综上所述,Group By 语句用于对数据进行分组处理,Having 子句用于筛选分组结果。通过组合使用 Group By 和 Having 子句,可以实现对分组后的数据进行更精细的筛选和汇总。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明算科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值