南宋x 2022-02-15 14:19 采纳率: 0%
浏览 218

mysql 如何查询每个用户消费金额最大的记录?

面试时遇到一个问题 查询每个用户消费金额 表结构[id, user_id, amount]

img

我想的是:

SELECT
    user_id,
    max( amount ) 
FROM
    orders 
GROUP BY
    user_id

但看到社区很多人给的语句都是使用了子查询。为什么要写这么复杂?
比如:

SELECT
    o.* 
FROM
    orders o
RIGHT JOIN (
    SELECT
        max(amount) mxa,
        user_id 
    FROM
        orders 
    GROUP BY
        user_id 
    ) m ON o.user_id = m.user_id 
AND o.amount = m.mxa
  • 写回答

5条回答 默认 最新

  • CSDN专家-sinJack 2022-02-15 14:33
    关注

    因为查询的字段不一样。如果你只是查询最大金额是可以的,但是还要查询订单其他相关信息的话,你的写法不适合。
    由于使用了group by分组。查询的普通字段必须在分组字段中。

    SELECT
        o.* 
    FROM
        orders o
    RIGHT JOIN (
        SELECT
            max(amount) mxa,
            user_id 
        FROM
            orders 
        GROUP BY
            user_id 
        ) m ON o.user_id = m.user_id 
    AND o.amount = m.mxa
    

    这种方式是针对于现实场景而言的,查询每个用户消费金额对应的订单记录信息。
    实现的逻辑:就是子查询找到每个用户最大的订单金额,然后根据订单金额去关联匹配,找到对应的订单记录。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 2月15日
  • 创建了问题 2月15日