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

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日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看