/group by/having/order by 常见错误

-- groupby子句常见错误  
-- 1),SELECT 子句中只能存在以下三种 元素。
-- ●	常数 ●	聚合函数 ● GROUP BY子句中指定的列名(也就是聚合键)

#错误用法
SELECT product_name, purchase_price, COUNT(*) -- 列名product_name不能包含
FROM Product GROUP BY purchase_price;

-- 2)groupby中不能使用列别名 order by可以用别名
-- 3)where子句中不能使用聚合函数
--              聚合函数可以再select,having,order by之后出现
--   where指定分组之前数据行的条件,having子句用来指定分组之后条件
-- 4)distinct /group by 
-- 可以实现相同的结果
SELECT DISTINCT product_type  FROM Product;
SELECT product_type  FROM Product GROUP BY product_type; 


-- having子句常见错误
-- 1)HAVING 子句中 能够使用的 3种要素如下所示。
-- ●	常数 ●	聚合函数 ● GROUP BY子句中指定的列名(即聚合键)

#错误用法


SELECT product_type,COUNT(*) FROM Product
GROUP BY product_type
HAVING product_name = '圆珠笔';

-- 2)相对于having子句更适合在where子句出现
-- 聚合键(groupby的key)既可以在having也可以在where
###但是最好还是写在where字句上,这样一来having只有常数聚合函数可以选择了
SELECT product_type, COUNT(*) FROM Product 
GROUP BY product_type 
HAVING product_type = '衣服';
#等价于order 
SELECT product_type, COUNT(*)  FROM Product 
WHERE product_type = '衣服' 
GROUP BY product_type;


-- order by子句
-- 1)order by子句中可以使用存在于表中,但不包含select子句之中的列 ,也可以使用聚合函数
SELECT product_type, COUNT(*)  FROM Product 
GROUP BY product_type 
ORDER BY COUNT(*);
-- 2)order by 子句可以使用列别名,但不要使用列编号

猜你喜欢

转载自blog.csdn.net/kylin_learn/article/details/81089281