mysql - 加入后选择汇总

标签 mysql inner-join rollup

从 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 行被删除,因此我通过使用另一个查询计算 rollup 并将其 union 到末尾来解决它结果

这是现场演示 [sqlfiddle] ,关于我这样做的方式的任何想法(例如最佳实践或性能),是否有一种方法可以在加入后保留汇总,我不知道。任何指示表示赞赏。

更新

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

最佳答案

我认为“汇总”不会被删除。结果行根本不符合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;

关于mysql - 加入后选择汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675168/

相关文章:

mysql - 即使使用带有内部连接的 Distinct 关键字,也会出现重复值

MySQL 多对多 JOIN 返回重复项

sql-server - 如何在sql查询中的内连接和case语句上应用partition by和row_number()

javascript - 使用函数之外的东西的函数和自包含的函数被称为什么?

javascript - node_modules\ng2-dragula\index.js 未导出“DragulaModule”

cors - Svelte API 代理 cors

java - 如何在 JDBC 中使用 MySQL 子查询?

mysql - 是否可以更新信息模式中的任何触发器?

mysql - SQL:获取每组出现频率最高的值

php - cakephp 3.x 中为不同模型在一页上创建多个表单