【问题标题】:How to add rows that is grouped by a new group in mysql?如何在mysql中添加由新组分组的行?
【发布时间】:2016-03-14 08:50:05
【问题描述】:

更新:这是与上一个不同的问题,当我在这个问题中使用 ROLLUP 时,它会添加一个总计行,但我只想要一个 C 组来合并 A 组和 B 组,因此 C 组显示小计颜色 X、Y 和 Z。不需要总行。

我有这样的数据

Group Color Money
A     X     100
A     X     300
A     Y     200
B     X     200
B     Y     300
B     Y     100
B     Z     110

我想创建一个包含 A&B 的新 C 组

有没有这样查询mysql中的数据?

Group Color SumMoney AvgMoney DataCount
A     X     400      200      2
A     Y     200      200      1
B     X     200      200      1
B     Y     400      200      2    
B     Z     110      110      1
C     X     600      200      3
C     Y     600      200      3
C     Z     110      110      1

我认为 UNION 可能会解决问题,但它也可能很慢并且语法会很长(更难维护(不是在这种情况下))。有什么建议么?谢谢!

【问题讨论】:

  • 与您几小时前的帖子非常相似,stackoverflow.com/questions/35981520/…
  • 与一小时前类似的答案,但GROUPING SETS 而不是ROLLUP
  • 您甚至没有接受对您之前问题的回答,并且您已经在重新发布它。使用联合,如果它变慢,请发布一个关于提高查询速度的新问题。 “语法会很长”是 SQL 中毫无意义的语句。查询的长度对执行速度没有直接影响。有时,长查询可能是唯一有效且最快的任务。此外,如果您对某事改变主意,您可以编辑一个问题(这应该是这个问题)
  • 我知道这有点相似,但这是两个不同的问题,不转发。 ROLLUP 适用于上一个问题。但在这种情况下,将多行显示总计,而不仅仅是小计。感谢您回答我的问题。现在我知道我应该使用 GROUPING SETS。

标签: mysql sql


【解决方案1】:

在 MySQL 中使用UNION ALL

SELECT
    g.`group`,
    g.color,
    sum(g.money) AS SumMoney,
    CAST(AVG(g.money) AS SIGNED) AS AvgMoney,
    COUNT(g.`group`) AS DataCount
FROM
    groups g
GROUP BY
    g.`group`,
    g.color

UNION ALL

SELECT
    'C',
    g.color,
    sum(g.money) AS SumMoney,
    CAST(AVG(g.money) AS SIGNED) AS AvgMoney,
    COUNT(g.`group`) AS DataCount
FROM
    groups g
GROUP BY
    g.color

输出是:

group | color | SumMoney | AvgMoney | DataCount
-----------------------------------------------
A     | X     |      400 |      200 |        2
A     | Y     |      200 |      200 |        1
B     | X     |      200 |      200 |        1
B     | Y     |      400 |      200 |        2
B     | Z     |      110 |      110 |        1
C     | X     |      600 |      200 |        3
C     | Y     |      600 |      200 |        3
C     | Z     |      110 |      110 |        1

【讨论】:

    【解决方案2】:
    select group,color,sum(money) as SumMoney ,avg(money) as AvgMoney,
           count(*) as DataCount from table_name group by group,color 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2021-10-07
      相关资源
      最近更新 更多