mysql - 同时使用分组列和非分组列

标签 mysql sql

我有一张包含付款请求的表格。

PaymentId (UNSIGNED INT AI)
ClientId (USINGNED INT)
Amount (FLOAT)
PayTo (DATE)

因为对于 PayTo,通常不超过 2-3 个不同的值(每个客户),我想创建一个列表 - 到目前为止应该支付多少钱。我是否正在寻找这样的查询:

SELECT PayTo, SUM(IF(PayTo <= PayTo, Amount, 0)) as AmountThisDate 
FROM Payments 
WHERE ClientId='%d' 
GROUP BY PayTo
ORDER BY PayTo DESC

但我百分百确定

PayTo <= PayTo

不起作用。

如果 GROUP BY 列和 TABLE 列是同一列,那么同时访问 GROUP BY 列和 TABLE 列的正确方法是什么?

最佳答案

听起来您想要一个累计总和。这是使用相关子查询的方法:

SELECT p1.PayDate,
       (select sum(p2.amount)
        from Payments p2
        where p2.ClientId = p.ClientId and
              p2.PayDate <= p.PayDate
       ) as AmountThisDate
FROM Payments p1
WHERE p1.ClientId='%d' 
GROUP BY p1.PayDate 
ORDER BY p1.PayDate DESC;

通过对付款(ClientId、PayDate、Amount)建立索引可以提高性能。

关于mysql - 同时使用分组列和非分组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812169/

相关文章:

mysql - Laravel 获取带有参数绑定(bind)的 sql 查询

java - SQL查询删除重复记录不起作用

sql - 如何计算连续事件之间的最小时间段?

java - 在 JPA-SQL(或 HQL)查询中兼容的 Hibernate Composite UserType

当我为子查询添加别名时,MySQL如何重用选择列别名?

php - MySQL 错误 1054 : Unknown column 'EASYPOPULATE_CONFIG_CUSTOM_FIELDS' in 'field list'

mysql - 如何使用数字搜索 varchar 列?

mysql - 在 laravel 查询中增加 +1 的更好方法?

mysqli_set_charset 不设置字符集

MySQL连接两个表并将多行合并为一个