sql語法基礎,sql分組查詢

01分組查詢–group by
格式:
SELECT 列名1,列名2,。。。
FROM 表名
GROUP BY 列名1,列名2.。。。
例一,按照商品種類統計一下行數

SELECT product_type,COUNT(*)
FROM   PRODUCT
GROUP BY product_type

在這裏插入圖片描述
例二按照商品編號統計,商品種類以及行數

SELECT product_type,COUNT(*)
FROM PRODUCT
GROUP BY product_id

在這裏插入圖片描述
錯誤原因是沒有弄清group by執行路線:
sql先按照group by進行分組,然後執行select語句
可以理解成select語句是group by的子句
這就要求select中的內容在group by語句中都要有

改正

SELECT product_id,product_type,COUNT(*)
FROM PRODUCT
GROUP BY product_id,product_type

在這裏插入圖片描述
02where語句和group by並用
格式:
SELECT 列名1,列名2,列名3.。。。
FROM 表名
WHERE
GROUP BY 列名1,列名2,列名3
思考where能和group by 交換位置嗎?
例三查詢衣服的相關信息,並且按照進價進行分組

SELECT purchase_price,COUNT(*)
FROM PRODUCT
GROUP BY purchase_price
WHERE product_type = '衣服'

執行
在這裏插入圖片描述
想想看錯誤原因是什麼呢?
分組查詢出來的數據,是根據查詢結果進行分組的。
也就是說對於限定查詢結果的where,一定要在group by的前面。
也可以從執行路線角度理解
前面提到group by執行路線
sql先按照group by的條件進行分組,然後執行select語句。
即**from→where→group by →select。
故where一定要group by前面。

改正例三

'SELECT purchase_price,COUNT(*)
FROM PRODUCT
WHERE product_type = '衣服'
GROUP BY purchase_price

在這裏插入圖片描述

03與group by 相關常見錯誤
錯誤一:

SELECT purchase_price,sale_price,COUNT(*)
FROM PRODUCT
WHERE product_type = '衣服'
GROUP BY purchase_price
--在select語句中包含多餘的列

在select語句中只能存在以下三種元素
常數,聚合函數,group by子句指定的列(聚合鍵)
在這裏插入圖片描述
按照執行路線
GROUP BY→select
可以發現聚合鍵和商品名並不是一一對應的(表中還存在多對這樣的情況)

錯誤二

SELECT purchase_price AS PP,COUNT(*)
FROM PRODUCT
WHERE product_type = '衣服'
GROUP BY PP
--在group by語句中使用別名

錯誤原因:
按照執行路線
GROUP BY→select,即使命制了別名,group by還不知道呢

錯誤三

SELECT purchase_price ,COUNT(*)
FROM PRODUCT
WHERE product_type = '衣服'
GROUP BY ourchase_price.desc
--對分組進行排序

事實上分組的結果是按照隨機順序進行排序的,按照執行路線,如果想進行對結果排序,應該是對select進行附加條件

錯誤四


SELECT purchase_price ,COUNT(*)
FROM PRODUCT
WHERE COUNT(*)
GROUP BY ourchase_price
--不能對where使用聚合函數

事實上只有select和having語句能使用聚合函數
至於錯誤原因後面再講

04聚合鍵中包含null
例四對進價進行分組查詢,並統計行數

SELECT purchase_price ,COUNT(*)
FROM PRODUCT
GROUP BY purchase_price

執行

在聚合鍵中null會被認爲是不確定,進而空出來或者顯示null

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