SQL查詢中having和where的異同點
阿新 • • 發佈:2019-01-06
SQL查詢中having與where 的異同點
在sql查詢中, having與where類似,可以篩選資料,where後的表示式怎麼寫,having後就怎麼寫。
1. where針對表中的列發揮作用,查詢資料。
2. having對查詢結果中的列發揮作用,篩選資料。
-- 查詢本店商品價格比市場價低多少錢,輸出低200元以上的商品
select goods_id,good_name,market_price - shop_price as s
from goods
having s>200 ;
--這裡不能用where因為s是查詢結果,而where只能對錶中的欄位名篩選
如果用where的話則是:
select goods_id,goods_name
from goods
where market_price - shop_price > 200;
同時使用where與having
select cat_id,goods_name,market_price - shop_price as s
from goods
where cat_id = 3
having s > 200;
查詢積壓貨款超過2萬元的欄目,以及該欄目積壓的貨款
select cat_id,sum(shop_price * goods_number) as s
from goods
group by cat_id
having s > 20000
查詢兩門及兩門以上科目不及格的學生的平均分
思路:
-- 先計算所有學生的平均分
select name,avg(score) as pj
from stu
group by name;
-- 查出所有學生的掛科情況
select name,score<60
from stu;
-- 這裡score<60是判斷語句,所以結果為真或假,mysql中真為1假為0
-- 查出兩門及兩門以上不及格的學生
select name,sum(score<60) as gk
from stu
group by name
having gk > 1;
-- 綜合結果
select name,sum(score<60) as gk,avg(score) as pj
from stu
group by name
having gk >1;