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: