MySQL之高級查詢

 

 

一,concat 拼接欄位

-- 將姓名和成績之間使用'-'將多個欄位拼接在一起顯示
SELECT CONCAT(name,"-",python_score,"-",sql_score,"-",test_score) from score;

  

 

 二,執行數學運算

 

 

-- 將兩個值進行相加運算
SELECT name, python_score,sql_score, python_score+sql_score as 總成績 FROM score

  

 

 

-- 總成績大於250 的前3名
SELECT name,python_score,sql_score,test_score, python_score+sql_score+test_score as 總成績 from score
-- 總成績大於等於250
WHERE python_score+sql_score+test_score >= 250
-- 進行排序
ORDER BY 總成績 DESC
-- 取前3個值
LIMIT 3

  

 

 三,聚合函數

 

-- python成績最高是多少
SELECT max(python_score) FROM score;

  

SELECT sum(python_score) as Python總成績,
	MAX(python_score) as Python最高得分,
	MIN(python_score) as Python最低得分,
	AVG(python_score) as Python平均分,
	COUNT(python_score) as 參加Python考試的總人數
	FROM score;

  

 

 四,數據分組

-- python成績及格或者sql成績及格的學員總數
SELECT COUNT(name) FROM score
WHERE python_score >= 60
OR
sql_score >= 60

  

 

 五,聚合函數靈活應用

 

 我們著重練習一個第三個問題,第二高的成績,三種方法

SELECT max(product_price) from orders
		WHERE product_price < (
		-- 先計算最大值
			SELECT max(product_price) from orders
		)

  

SELECT DISTINCT product_price FROM orders
ORDER BY product_price DESC
LIMIT 1,1

  

SELECT DISTINCT product_price FROM orders
ORDER BY product_price DESC
LIMIT 1 OFFSET 1

  

六,分組,group by 

-- 查詢2020-11-05 的訂單
SELECT * from orders
WHERE order_time LIKE "2020-11-05%"

  

 

 

 我們從結果中可以看到,出來的結果中有不同的品牌,假設我要統計莫個品牌的資訊

-- 查詢2020-11-05 的 xiaomi 相關訂單
SELECT * from orders
WHERE 
order_time LIKE "2020-11-05%"
AND
product_name = "xiaomi"

  統計小米當天的訂單總數

-- 查詢2020-11-05 xaimi 品牌的訂單總數
SELECT count(*)  from orders
WHERE 
order_time LIKE "2020-11-05%"
AND
product_name = "xiaomi"

  每天都有大量的訂單,如果我要統計每天的數據呢?

-- 查看品牌以及品牌對應記錄條數,以及銷售出去的每個品牌的總個數
SELECT product_name, COUNT(product_name) ,sum(product_order_num) FROM orders
GROUP BY product_name

  

 

 

 

-- 查看2020-11-05 這一天每個品牌以及這個品牌對應記錄條數,和銷售出去的每個品牌的總個數
SELECT product_name, COUNT(product_name) ,sum(product_order_num) FROM orders
WHERE order_time like "2020-11-05%"
GROUP BY product_name;

  

 

 

 

-- 查看2020-11-05 這一天每個品牌以及這個品牌對應記錄條數,和銷售出去的每個品牌的總個數
-- 顯示 出貨量大於80
SELECT product_name as 品牌, COUNT(product_name) as 訂單記錄 ,sum(product_order_num) as 出貨量 FROM orders
-- 限定日期
WHERE order_time like "2020-11-05%" 
-- 根據名稱分組
GROUP BY product_name
-- GROUP BY 的條件從句 主要可以使用聚集函數
HAVING sum(product_order_num) > 80

  

 

 

 having 使用方法

 

 

 

SELECT product_name as 品牌, COUNT(product_name) as 訂單記錄 ,sum(product_order_num) as 出貨量 FROM orders
-- 限定日期
WHERE order_time like "2020-11-05%" 
-- 根據名稱分組
GROUP BY product_name
-- GROUP BY 的條件從句 主要可以使用聚集函數
HAVING sum(product_order_num) > 80
And COUNT(product_name) BETWEEN 18 and 20

  也可以和order by  limint一起使用

SELECT product_name as 品牌, SUM(product_order_num*product_price) as 銷售總額 FROM orders
WHERE order_time LIKE "2020-11-05%"
GROUP BY product_name
ORDER BY SUM(product_order_num*product_price) DESC
LIMIT 1

  

 

 

 七,子查詢

(一個查詢結果作為另外一個查詢語句中的條件存在)

-- 查詢單價最高的商品的銷量數據
-- 顯示出 此商品品牌的總營業額
-- 1. 先找到最大價格
SELECT max(product_price) from orders;

-- 2. 根據最大價格找到商品品牌
SELECT product_name FROM orders
WHERE product_price = (
	-- 子查詢,執行的時候先運行子查詢中的語句,結果作為 外層sql的查詢條件。
	SELECT max(product_price) from orders
);

-- 3.根據商品品牌找到對應此品牌中的總銷售額
SELECT sum(product_price*product_order_num) from orders
-- 商品品牌可能有多個
WHERE product_name in (
	-- 子查詢 查詢出品牌名稱
	SELECT product_name FROM orders
	WHERE product_price = (
		-- 子查詢,執行的時候先運行子查詢中的語句,結果作為 外層sql的查詢條件。
		SELECT max(product_price) from orders
	)
);

  

 

 

 

-- 查詢非單價最高的商品的銷量數據(除了商品單價最高的哪個品牌)
-- 顯示出 此商品品牌的總營業額
SELECT product_name as 品牌, sum(product_price*product_order_num) as 總營銷額 from orders
-- 商品品牌可能有多個
WHERE not product_name in (
	-- 子查詢 查詢出品牌名稱
	SELECT product_name FROM orders
	WHERE product_price = (
		-- 子查詢,執行的時候先運行子查詢中的語句,結果作為 外層sql的查詢條件。
		SELECT max(product_price) from orders
	)
)
group by product_name
ORDER BY 總營銷額

  

 

-- 查詢非單價最高的商品的銷量數據(除了商品單價最高的哪個品牌)
-- 顯示出 此商品品牌的總營業額
SELECT product_name as 品牌, sum(product_price*product_order_num) as 總營銷額 from orders
-- 商品品牌可能有多個
WHERE not product_name in (
	-- 子查詢 查詢出品牌名稱
	SELECT product_name FROM orders
	WHERE product_price = (
		-- 子查詢,執行的時候先運行子查詢中的語句,結果作為 外層sql的查詢條件。
		SELECT max(product_price) from orders
	)
)
group by product_name
ORDER BY 總營銷額

  

 

 

 

Tags: