MYSQL在group by中有共同的记录

标签 mysql group-by aggregate-functions

这是我的 table :

user     presenter   price  
------  ------------  --------
84            84      5000
88            84      3000
89            84      4000
89            84      7000

我将按用户 对这个表进行分组并汇总每个用户的总价格,还包括他们的presenter id 的行等于用户
最终结果应该是:

user          total_price  
------    ------------------
84        5000 + 3000 + 4000 + 7000
88        3000
89        4000 + 7000

最佳答案

您可以为此使用UNION ALL:

SELECT user, SUM(price) AS total_price
FROM (
  SELECT user, price
  FROM mytable

  UNION ALL

  SELECT presenter AS user, price
  FROM mytable AS t1
  WHERE presenter <> user AND
        EXISTS (SELECT 1
                FROM mytable AS t2
                WHERE t1.presenter = t2.user)) AS t
GROUP BY user

第二个查询将所有具有 presenter 且也是 user 的记录附加到 user 数据。外部查询仅使用 GROUP BY,以便为每个 user 计算 priceSUM

Demo here

关于MYSQL在group by中有共同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147815/

相关文章:

postgresql - 提高 PostgreSQL 中自定义聚合函数的性能

php - 从 PHP 将值插入到 mySQL 数据库中的某些行

java - 这个 SQL 子句有什么问题?

sql - 文本字段上的 COUNT 和 GROUP BY 似乎很慢

MySQL 动态交叉表

MySQL - 选择不在分组依据中的列

mysql - 如何在 SQL 中选择没有空值的行(在任何列中)?

php - Doctrine - ManyToMany 关系没有正确删除

sql - Oracle 查询按类型分组

apache-spark - 通过 bucketBy 优化 Spark DataFrame/Dataset groupBy