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

标签 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

但是当我尝试概括查询时,我陷入困境,因为负责返回 status=2 的 upay_id 最大值的子查询在单个用户的情况下仅返回一行,因为我指定了用户 ID

但是该怎么办?如果我想退还每个用户而不是一个用户支付的预付款?

最佳答案

您可以将子查询移至 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

关于选择多用户高级付款时 MySQL 查询失败,但对于单用户来说效果很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148613/

相关文章:

mysql 条件连接取决于列

php - 无法在kali linux上配置LAMP

mysql - 返回生日为今天的数据

php - 如何在 PHP 中仅显示选定的行?

SQL 到 XML 到 XSLT 到 HTML,还是 SQL 到 HTML?

sql - 如何将总计添加到此查询?

php - 向 Android 用户显示来自 MySQL 的信息 EXACLY ONCE

MySQL查询从出生日期获取年龄

MySQL - 在一个 View 中加入两个表,从一个表中取出行并变成列

sql - 如何过滤 Postgresql 中的 JSON 列?