gpt4 book ai didi

MySQL order by 与 count 和 group by 问题

转载 作者:行者123 更新时间:2023-11-30 01:37:41 28 4
gpt4 key购买 nike

我的表格看起来像:

# Table user

user_id PK
...

# Table buy

buy_id PK
user_id FK
...

# Table offert

offert_id
user_id
...

好吧,我需要知道 1 个“用户”的最后“购买”并获取该“用户”的“报价”计数,我尝试了类似的操作:

select b.buy_id,count(distinct c.offert_id) as cv from user a
inner join buy b using(user_id) left join offert c using(user_id) where a.user_id=4
group by a.user_id order by b.buy_id desc

但它总是返回第一个“购买”而不是最后一个,看起来这个 order by 没有任何效果

我知道我可以使用子查询来做到这一点,但我想知道是否有一种方法可以在不使用子查询的情况下做到这一点,也许使用最大函数,但我不知道如何做到这一点。

谢谢。

最佳答案

您的方法根本无法保证有效。一个重要原因是 group byorder by 之前处理。

假设您指的是每个用户的最大 buy_id,您可以这样做:

select u.user_id, u.last_buy_id, count(distinct o.offert_id)
from (select u.*,
(select buy_id from buy b where u.user_id = u.user_id order by buy_id desc limit 1
) last_buy_id
from user u
) left outer join
offert o
on o.user_id = u.user_id
group by u.user_id;

第一个子查询使用相关子查询来获取每个用户的最后购买 ID。然后它加入 offert 并进行聚合。请注意,此版本在聚合中包含 user_id

关于MySQL order by 与 count 和 group by 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com