寫了好幾年的sql,having語句基本上很少寫,這就有一點尷尬了,現在總結一下having的作用,每日整理一下學習文檔。
having 通常伴隨group by使用,過濾group by的數據集。
比如找到重復的數據:
select card_id,count(*) from 502_account group by card_id HAVING count(1)>1
找到找到重復的card_id
如果要找到金額大於500
select card_id from 502_drug_sale group by card_id HAVING sum(amount) >100000
其實是比較簡單的用法。
利用having,刪除重復的數據,算是進階用法吧。
DELETE
FROM
account
WHERE
card_id IN ( SELECT card_id FROM cunjk.249 _account GROUP BY card_id HAVING count( card_id ) > 1 )
AND id NOT IN ( SELECT min( id ) FROM cunjk.249 _account GROUP BY card_id HAVING count( card_id ) > 1 )
我的account表有幾百萬條數據,需要找到重復的數據然后刪掉,card_id 是卡號,用來做區分,id是主鍵,自增長,刪除重復卡號信息的數據,where條件的第一個條件,找到重復的card_id,第二個條件,找到重復數據中較小的那一個id,not in,刪除較大id的重復數據
you get?