选择多用户高级付款时,MySQL查询失败,对单个用户来说效果很好

时间:2015-12-08 05:25:05

标签: mysql sql

这是表格结构

enter image description here

我在这里使用付款类型来确定交易类型

1 - 提前付款
2 - 付款

以下是示例数据

enter image description here

SELECT SUM(upay_amount)
FROM user_payment
WHERE upay_status=1 AND upay_id >
    (
        SELECT MAX(upay_id) FROM user_payment WHERE upay_usr_id=3 AND upay_status=2
    )
    AND upay_usr_id=3
GROUP by upay_usr_id

输出效果很好

438359

但是当我试图概括查询时,我被卡住了导致负责返回upay_id的最大值为子状态= 2的子查询在单个用户的情况下仅返回一行,因为我指定了用户id

但是做什么?如果我想要退还每个用户只需一次的预付款吗?

1 个答案:

答案 0 :(得分:2)

您可以将子查询移动到FROM并添加GROUP BY用户ID以查找每个用户的最大值。然后加入它并在WHERE中使用MAX。喜欢这个

SELECT SUM(upay_amount)
FROM user_payment up INNER JOIN (
        SELECT upay_usr_id, MAX(upay_id) grMax
        FROM user_payment 
        WHERE upay_status=2
        GROUP BY upay_usr_id
    ) gr ON up.upay_usr_id=gr.upay_usr_id
WHERE upay_status=1 AND upay_id > gr.grMax
GROUP BY up.upay_usr_id