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 总营销额
标签:product,name,--,高级,查询,score,MySQL,orders,SELECT 来源: https://www.cnblogs.com/shuaiyuan/p/16381976.html