根據例題對Group by ,having以及count(*)的理解

三表聯立
Q;查詢某類別(T_category表的某category_id字段)下評論數(T_category_review表的Review字段) >=3條的所有產品的名稱(T_product表的Product_name字段)

A:
根據中文要求切入點:
爲T_product_review表的T_c_Product_id(產品名稱),
此字段可以區分不同產品(Product_id),
進而將相同的產品(Product_id)的評論(Review)歸爲一類!!!

一.首先:瞭解Group BY的作用
通俗理解:將SQL語句查詢的Group BY xxx中的xxx字段,根據不同的字段內容分別"壓縮"在不同的"盒子"
在這裏插入圖片描述
如果查詢聯立表的其他字段(即 根據 產品類別(電器類) 查詢 產品名稱)

例一>
 SELECT t.Product_name 產品名稱 
from T_product t,t_category c
 where  c.Category_id=t.T_C_Category_id and c.Category_name='電器類'
 
 GROUP BY c.Category_id

結果:只會顯示該類別中聯立表的第一行數據****(即只能根據 電器類 查詢到 電視 一條產品數據)

問題來了,如果我查詢電器類的所有產品信息怎麼辦呢?!
(重點在group by的字段改變)

即c.Category_id變爲 t.Product_id

即可查出所有產品

例二>
 SELECT t.Product_name 產品名稱 
from T_product t,t_category c
 where  c.Category_id=t.T_C_Category_id and c.Category_name='電器類'
 
 GROUP BY  t.Product_id

是不是搞蒙了?我當時也是
但是我細細總結

group by後的字段

1. 有外鍵的主鍵(pk)

見例一>

則會根據主鍵(電器類id)查詢其外鍵在外鍵表的第一行信息(電視的信息)

2.如果 是外鍵(fk)

例二>

則會根據外鍵表(外鍵的電器類id)的所有信息(電視,冰箱,空調等信息)

3. 無外鍵的主鍵(pk)

group by沒有意義!!!

然後我們根據 T_category_review表將同一個類別的產品(電視,冰箱…)group by"壓縮"在一起,
這時候count()就能起作用了,
having 和where的作用一樣,但having只能與group by成對存在…
count(
)數量就是該類別產品的評論數量了!!!

  SELECT t.Product_name 產品名稱, count(*) 評論數量 
 				 from T_product t,  t_product_review r
 	where t.Product_id=r.T_c_Product_id
 	 GROUP BY r.T_c_Product_id 
	HAVING count(r.T_c_Product_id)>=3

效果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章