恶补SQLing
第一种写法,需要注意的点是all
having是和group by连用时候的where
IN、ALL、ANY、SOME的解释
- IN:在范围内的值,只要有就true
- ALL: 与子查询返回的所有值比较为true 则返回true
- ANY:与子查询返回的任何值比较为true 则返回true
- SOME:是ANY的别称,很少用
SELECT seller_id
from sales
group by seller_id
having SUM(price) >= ALL (
select SUM(price)
from sales
group by seller_id
)
第二种我就是先找和最大的price,通过排序+limit0, 1找最大值,然后比较sum
SELECT seller_id
from sales
group by seller_id
having SUM(price) = (
select SUM(price) as sum
from sales
group by seller_id
order by sum desc
limit 0, 1
)
第三种使用到 RANK() OVER(ORDER BY SUM(price) DESC) 函数
获取rank为1的seller
select seller_id
from (
SELECT seller_id , RANK() OVER(ORDER BY SUM(price) DESC) AS rk
from sales
group by seller_id
) as t
where t.rk = 1
第四种采用with
with temp as (
select SUM(price) as sum
from sales
group by seller_id
)
SELECT seller_id
from sales
group by seller_id
having SUM(price) = (select max(sum) from temp)
SQL查询技巧:ALL、ANY、SOME与子查询的高级应用
本文详细介绍了SQL中ALL、ANY、SOME操作符的用法,以及如何结合GROUP BY和HAVING子句进行复杂查询。通过四种不同的查询方法,展示了找出销售额不低于所有销售员总销售额的销售员ID。这些技巧对于优化数据库查询和数据分析具有重要意义。
420

被折叠的 条评论
为什么被折叠?



