【问题标题】:Selecting rollup after join加入后选择汇总
【发布时间】:2014-08-31 17:56:05
【问题描述】:

从 UX 移出post

我有 2 个查询,每个查询都有汇总..


  SELECT DATE(date) AS day, 
         COUNT(IF(name = 'red', 1, NULL)) AS "red",
         COUNT(IF(name = 'blue', 1, NULL)) AS "blue",
         COUNT(IF(name = 'yellow', 1, NULL)) AS "yellow" 
    FROM test1 
GROUP BY day with rollup  

  SELECT DATE(date) AS day, 
         COUNT(*) AS total 
    FROM test2 
GROUP BY day with rollup

当加入他们时,rollup 行被删除,所以我通过使用另一个查询来解决它,计算 rollupunion 它到结果的末尾

这是一个现场演示 [sqlfiddle],关于我这样做的任何想法(如最佳实践或性能),如果有办法在加入后保留rollup,我不知道。任何指针表示赞赏。

更新

我想要的正确结果集是小提琴中的结果。每行包含一天的摘要,从第一次查询项目/颜色数到第二次查询当天的请求数。汇总将是每个项目/颜色和请求的分类总数。希望我说清楚:)

【问题讨论】:

  • 你需要什么结果集?每行有什么?汇总行中应该包含什么?
  • @OllieJones 请查看更新后的帖子 :) 谢谢

标签: mysql inner-join rollup


【解决方案1】:

我认为“汇总”不会被删除。结果行根本不匹配join 条件。你可以试试这个:

select t1.*, t2.total
from (SELECT date(date) as day, count(IF(name = 'red', 1, NULL)) AS "red",
             sum(name = 'blue') AS blue,
             sum(name = 'yellow') AS yellow
      FROM test1
      group by day with rollup 
     ) t1 join 
     (select date(date) as day, count(*) as total
      from test2
      group by day with rollup
     ) t2
     on t1.day = t2.day or t1.day is null and t2.day is null;

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多