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

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

語法:SELECT  COUNT(*) FROM  tableapp

使用:如今有一個表,名叫app_category,從Navicat中能夠看到表中全部數據,如圖所示,可見表中有297條數據函數

使用count函數的時候能夠看到:工具

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

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

這樣依然有點不夠酷炫,那麼咱們還能夠在後面繼續追加sql語句呀開發

例如這條語句:table

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

其查詢的結果是隻有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

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

相關文章
相關標籤/搜索