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

本文介绍了SQL中GROUP BY和ORDER BY子句的正确用法,包括常见的错误示例及如何避免这些错误。同时,文章对比了DISTINCT与GROUP BY的不同应用场景,并详细解释了HAVING子句的使用规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 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 子句可以使用列别名,但不要使用列编号
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank <= 3
 ORDER BY 2, 1 DESC
-- 上面的代表按照select的第2列升序排列,按照第1列降序排列

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值