SQL Count(*)函數,GROUP_By,Having的聯合使用


COUNT(*)  函數返回在給定的選擇中被選的行數。

語法:SELECT  COUNT(*) FROM  table

使用:現在有一個表,名叫app_category,從Navicat中可以看到表中所有數據,如圖所示,可見表中有297條數據

使用count函數的時候可以看到:

當然僅僅是這個樣子,是木有意義的,我用個可視化工具一眼看穿,要這個函數就顯得雞肋了,那么我們繼續往下看。

場景是這樣的:表app_category與表category關聯。且表間關系是一對多,即同一個app_category_id 對應多個category-id,現在我需要統計出每一個category_id在app_category表中出現的次數那么該如何實現呢,請看接下來的操作:

這樣依然有點不夠酷炫,那么我們還可以在后面繼續追加sql語句呀

例如這條語句:

SELECT category_id ,COUNT(*) AS count FROM app_category
GROUP BY category_id HAVING count(category_id) >2

其查詢的結果是只有count的值大於2 的時候,才是需要的結果

是不是有點小先進了,當然不要激動,我們還可以把這個查詢的結果作為子查詢,進行嵌套查詢,兩個表關聯查詢然后再嵌套查詢等等。這里我就不過多截圖,上一個開發商城項目中用到的查詢語句:

 

SELECT ps.name FROM property_set ps , category_property_set cps WHERE ps.id=cps.property_set_id AND category_id=(
SELECT category_id AS count FROM category_property_set
GROUP BY category_id HAVING count(category_id) <5
)

大眼一看,可能比較懵逼,聽我分析一下:

首先是子查詢:SELECT category_id AS count FROM category_property_set 
GROUP BY category_id HAVING count(category_id) <5

查出category_property_set 表中category_id出現次數小於5的那個category_id的具體的值,剛好得到的結果是只有一條,那么滿足嵌套查詢的條件,用到<,>=等符號時,子查詢結果必須唯一,所有給其添加到外部查詢,其實等價於這樣一條語句:

SELECT ps.name FROM property_set  ps , category_property_set  cps WHERE ps.id=cps.property_set_id  AND category_id=925640926728343552

不用懷疑,這個category_id就是查詢出來的ID,然后這又是一個最最基本的兩表聯合查詢,連個外聯內聯都沒用,然后結果就是這個樣子

啊哈,剛好就是我需要的一個名稱,為啥這麻煩呢,因為表建的不好唄,需要通過category_id 查category_property_set表,然后再通過結果去查property_set表,最后得到屬性的名字,然后就只能想辦法在sql語句上下功夫了呀。

當然,看完有可能還是蒙蔽的。不要虛,看這個
http://www.w3school.com.cn/sql/sql_func_count_ast.asp

這個網址里面的東西看完了,保證啥查詢語句都難不倒你了。說完收工


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM