0

我的表格看起来像:

# 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

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

我知道我可以使用子查询来做到这一点,但我想知道是否有办法使用子查询来做到这一点,也许使用 max 函数,但我想知道如何做到这一点。

谢谢。

4

1 回答 1

0

您的方法根本无法保证有效。一个很大的原因是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在聚合中包含 。

于 2013-05-18T19:19:10.483 回答