标签:group by 没有 des 计数 bms 删除重复数据 代码阅读 最大 重复
通过 SQL 对数据进行某种操作或计算时需要使用函数。
常用函数
用于汇总的函数称为聚合函数或者聚集函数
-- 计算全部数据的行数 SELECT COUNT(*) FROM Product;
-- 计算NULL之外的数据行数 SELECT COUNT(purchase_price) FROM Product;
-- 计算销售单价的合计值 SELECT SUM(sale_price) FROM Product;
-- 计算销售单价和进货单价的平均值 SELECT AVG(sale_price), AVG(purchase_price) FROM Product;
-- 计算销售单价的最大值和进货单价的最小值 SELECT MAX(sale_price), MIN(purchase_price) FROM Product;
-- 计算去除重复数据后的数据行数 SELECT COUNT(DISTINCT product_type) FROM Product; -- 先计算数据行数再删除重复数据的结果 SELECT DISTINCT COUNT(product_type) FROM Product;
-- 使用GROUP BY子句进行汇总 SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>, ……; -- 按照商品种类统计数据行数 SELECT product_type, COUNT(*) FROM Product GROUP BY product_type;
在 GROUP BY 子句中指定的列称为聚合键或者分组列
GROUP BY 子句的书写位置也有严格要求,一定要写在 FROM 语句之后
子句的书写顺序(暂定)
-- 使用WHERE子句和GROUP BY子句进行汇总处理 SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> WHERE GROUP BY <列名1>, <列名2>, <列名3>, ……; -- 同时使用WHERE子句和GROUP BY子句 SELECT purchase_price, COUNT(*) FROM Product WHERE product_type = ‘衣服‘ GROUP BY purchase_price;
GROUP BY 和WHERE 并用时,SELECT 语句的执行顺序
常见错误①:在SELECT子句中书写了多余的列
SELECT 子句中只能存在以下三种元素
常会出现的错误就是把聚合键之外的列名书写在SELECT 子 句之中
使用GROUP BY子句时,SELECT子句中不能出现聚合键之外的列名
-- 在SELECT子句中书写聚合键之外的列名会发生错误 SELECT product_name, purchase_price, COUNT(*) FROM Product GROUP BY purchase_price; /* 列名product_name 并没有包含在GROUP BY 子句当中。因此,该列名也不能书写在 SELECT 子句之中 */
常见错误②:在GROUP BY子句中写了列的别名
-- GROUP BY子句中使用列的别名会引发错误 SELECT product_type AS pt, COUNT(*) FROM Product GROUP BY pt
常见错误③:GROUP BY子句的结果能排序吗
常见错误④:在WHERE子句中使用聚合函数
-- 在WHERE子句中使用聚合函数会引发错误 SELECT product_type, COUNT(*) FROM Product WHERE COUNT(*) = 2 GROUP BY product_type;
SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>, …… HAVING <分组结果对应的条件>
使用 HAVING 子句时 SELECT 语句的顺序
HAVING子句要写在GROUP BY子句之后
-- 从按照商品种类进行分组后的结果中,取出“包含的数据行数为2 行”的组 SELECT product_type, COUNT() FROM Product GROUP BY product_type HAVING COUNT() = 2;
HAVING 子句中 能够使用的 3种要素如下
-- HAVING子句的不正确使用方法 SELECT product_type, COUNT(*) FROM Product GROUP BY product_type HAVING product_name = ‘圆珠笔‘;
SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> ORDER BY <排序基准列1>, <排序基准列2>, …… -- 按照销售单价由低到高(升序)进行排列 SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY sale_price;
ORDER BY 子句中书写的列名称为排序键
ORDER BY 子句都需要写在 SELECT 语句的末尾。这是因为对数据行进行排序的操作必须在结果即将返回时执行
子句的书写顺序
-- 按照销售单价由高到低(降序)进行排列 SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY sale_price DESC;
-- 按照销售单价和商品编号的升序进行排序 SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY sale_price, product_id;
ORDER BY 子句中允许使用别名的
使用 HAVING 子句时 SELECT 语句的顺序
-- SELECT子句中未包含的列也可以在ORDER BY子句中使用
SELECT product_name, sale_price, purchase_price FROM Product ORDER BY product_id; -- product_id 不显示在查询结果中
-- 通过列名指定 SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY sale_price DESC, product_id; -- 通过列编号指定 SELECT product_id, product_name, sale_price, purchase_price
FROM Product ORDER BY 3 DESC, 1;
标签:group by 没有 des 计数 bms 删除重复数据 代码阅读 最大 重复
原文地址:https://www.cnblogs.com/dc2019/p/13770283.html