关于group by常见的错误
2021/8/27 23:36:33
本文主要是介绍关于group by常见的错误,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、把聚合键之外的列名书写在select子句中。 比如:select product_name,purchase_price,count(*) from product group by purchase_price; 运行结果会出错,出错的原因: 列名 product_name 并没有包含在group by子句中,此该列名也不能写在select子句中。 进一步解释:通过某个聚合键将表进行分组之后,一行就代表一组。例如,使用进货单价将表进行分组之后,一行就代表了一个进货单价,问题就出在这里,聚合键和商品名并不一定是一对一的 例如,进货单价是2800日元的商品有‘运动T恤’和‘菜刀’两种,但是用groop by 子句 进货单价分组 2800日元这一行应该对应那种商品名称呢? 题目描述:sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序。
select 子句中只能存在以下三种元素:常数、聚合函数、group by子句指定列(聚合键)
所以下面这么写法错误:
1 2 3 4 5 6 7 8 |
select u.name as u_n, c.name as c_n, max(l.date) as d #列名c.name as c_n不能包含
from login as l
inner join user as u
on l.user_id=u.id
inner join client as c
on l.client_id=c.id
group by u.name
order by u.name asc
|
解释:group by中只包含了u.name,但不包括c.name,因此c.name 不能出现在select里。
正确的写法(多列名IN):
复制代码1 2 3 4 5 6 7 |
select u.name as u_n,
c.name asc_n,
l.date
from login l join user u on l.user_id=u.id
join client c on l.client_id=c.id
where (l.user_id,l.date) in (select user_id,max(date) from login group by user_id)
order by u_n
|
SELECT a.date,COUNT(*)
FROM(
SELECT l.*,d.date 首次登录时间
FROM login l
LEFT JOIN(
SELECT user_id,MIN(DATE) DATE
FROM login
GROUP BY user_id)d
ON l.user_id=d.user_id) a
GROUP BY a.date
HAVING a.date=a.首次登录时间;
————————————————
版权声明:本文为CSDN博主「koding7879」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/koding7879/article/details/108985341
这篇关于关于group by常见的错误的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29RocketMQ底层原理资料详解:新手入门教程
- 2024-11-29RocketMQ源码资料解析与入门教程
- 2024-11-29[开源]6.1K star!这款电视直播源神器真的太赞啦!
- 2024-11-29HTTP压缩入门教程:轻松提升网页加载速度
- 2024-11-29JWT开发入门指南
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能