mysql SUM 聚合与 ORDER BY

标签 mysql sql

我正在使用 SUM 将其中一个字段相加,但对于其余字段,我希望那些来自最新条目的字段。

当前查询:

SELECT cu.*,
SUM(cu.use_count) AS total_use_count
FROM coupons_used cu
GROUP BY cu.coupon_id;

当前结果:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [timestamp] => 2015-05-08 04:52:31
            [coupon_id] => 133
            [user_id] => 104
            [use_count] => 1
            [redemption_code] => 123412341234
            [total_use_count] => 2
        )

)

该时间戳来自第一个条目,我希望它来自最后一个条目。我尝试同时添加 ORDER BY cu.timestamp ASCDESC 但我得到了相同的结果。 total_use_count 需要保持原样,但如何让其余字段来自最后一个条目(当然是每个分组)?

最佳答案

如果 (coupon_id,timestamp) 元组是唯一的(也就是说,如果我们保证没有两(或更多)行具有相同的 timestamp 值对于给定的 coupon_id,至少对于“最新”时间戳)...

SELECT c.id
     , c.timestamp
     , c.coupon_id
     , c.user_id
     , c.use_count
     , c.redemption_code
     , m.total_use_count
  FROM ( SELECT MAX(mt.timestamp) AS latest_timestamp
              , SUM(mt.use_count) AS total_use_count
              , mt.coupon_id
           FROM coupons_used mt
          GROUP BY mt.coupon_id
       ) m
  JOIN coupons_uses c
    ON c.coupon_id = m.coupon_id
   AND c.timestamp = m.latest_timestamp

如果 (coupon_id,timestamp) 不是唯一的;如果给定的 coupon_id 可能有两行具有相同的时间戳,并且如果我们只想为每个 coupon_id 返回一行...

我们可以使用 GROUP BY 的 MySQL 扩展并添加到查询的末尾:

 GROUP BY c.coupon_id

关于mysql SUM 聚合与 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146629/

相关文章:

mysql - 有没有办法将列定义为 "updatable via trigger only"以强制完整性?

sql - 合并: modifying multiple tables

sql - 如何返回黄色人口普查 block 中的所有行?

mysql - macOS 上的 MAMP 或 MySQL

MySQL 服务器报告启动正确,但在连接尝试时返回错误

mysql - LOAD FILE,最后一行和最后一列输出错误

java - Oracle Java SQL异常错误: ORA-0094

sql - 获取表中特定起点和终点之间的多条记录

mysql - 如何在mysql中两次选择1个表中的同一列

MySQL UNION 表按列分组