Group by和Having的使用

在这里插入图片描述
对于需要寻找某个值的出现次数,可以使用在这里插入图片描述
查询出现重复次数,并返回该Email

select distinct Email
from Person
where Email
in
(select Email
from  Person
group by Email
having count(Email)>1)

也可以采用临时表的方式:
在这里插入图片描述
注意:group by 只是查询结果去重,并不是真的删掉了重复的记录
优先顺序
where>group by>having>order by

在这里插入图片描述
注意:学生在每个课中不应被重复计算

select distinct class
from courses
group by class
having count(distinct student)>=5

group by按照课程排序,having count计算的是每个课程学生的数量,所以要在having count的括号里加上distinct student
!!!having count指表中所有数,而不能表示出连续出现的数

在这里插入图片描述

select  distinct Lg1.Num as ConsecutiveNums
from Logs lg1,Logs lg2,Logs lg3
where lg1.Id=lg2.Id+1 and lg1.Num=lg2.Num
and lg2.Id=lg3.Id+1 and lg2.Num=lg3.Num

SQL 语句的执行顺序跟其语句的语法顺序并不一致
一般而言
SQL 语句的语法顺序是:
SELECT[DISTINCT]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY
其执行顺序为:
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY
需要注意的是:
1、 FROM 才是 SQL 语句执行的第一步。数据库在执行SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。
2、SELECT 是在大部分语句执行了之后才执行的,严格的说是在 FROM 和 GROUP BY 之后执行的。这就是你不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件的原因。
3、并非所有SQL都按照上述的顺序进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值