一,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 总营销额