mysql - 在 SQL Union 语法中组合数据

标签 mysql sql union

我正在执行 SQL 联合语法,我希望得到这样的结果:

+---------------+-----+---------+
|trkBusinessUnit| New | Pending |
+---------------+-----+---------+
|      AIIB         2      0    |
| Credit Control    1      3    |
|  Direct Center    1      2    |
| Financial Ins     1      1    |
| Motor Acclaim     1      0    |
+-------------------------------+

来 self 的代码:

SELECT trkBusinessUnit, Count(*) as New,0 as Pending
FROM tblDTPTracker
WHERE trkStatus = 'New'
GROUP BY trkBusinessUnit

UNION

SELECT trkBusinessUnit,0 as New,Count(*) as Pending
FROM tblDTPTracker
WHERE trkStatus = 'Pending'
GROUP BY trkBusinessUnit

但是当前的输出是:

+---------------+-----+---------+
|trkBusinessUnit| New | Pending |
+---------------+-----+---------+
|      AIIB         2      0    |
| Credit Control    1      0    |
| Credit Control    0      3    |
|  Direct Center    1      0    |
|  Direct Center    0      2    |
| Financial Ins     1      0    |
| Financial Ins     0      1    |
| Motor Acclaim     1      0    |
+-------------------------------+

我是漏掉了什么还是做错了什么?请指教。

最佳答案

前面的答案中存在(或已经存在)一些语法问题,但是前面两个答案的意图都是正确的,您需要使用 GROUP BY 查询而不是使用 UNION - 这根本不符合您的希望/期望。

UNION 或 UNION ALL 按行工作,绝对不要按列合并

因此,基于 group by 的查询的 MySQL 语法可以是以下任何一种:

COUNT() 使用隐式 NULL

SELECT 
       trkBusinessUnit
     , COUNT(CASE WHEN trkStatus = 'New'     THEN 1 END) as New 
     , COUNT(CASE WHEN trkStatus = 'Pending' THEN 1 END) as Pending
FROM tblDTPTracker
GROUP BY trkBusinessUnit
;

COUNT() 使用明确的 NULL

SELECT 
       trkBusinessUnit
     , COUNT(CASE WHEN trkStatus = 'New'     THEN 1 ELSE NULL END) as New 
     , COUNT(CASE WHEN trkStatus = 'Pending' THEN 1 ELSE NULL END) as Pending
FROM tblDTPTracker
GROUP BY trkBusinessUnit
;

SUM() 作为计数的替代方法:

select
       trkBusinessUnit
     , sum(case when trkStatus = 'New'     then 1 else 0 end) as New
     , sum(case when trkStatus = 'Pending' then 1 else 0 end) as Pending
from tblDTPTracker
where trkStatus in ('Pending', 'New')
group by trkBusinessUnit
;

在此回答之前向 Marc Gravell 和 Daniel Gadawski 致歉;此答案是您的衍生答案。

See this SQLFiddle demo of these queries

关于mysql - 在 SQL Union 语法中组合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26055369/

相关文章:

mysql - 我的 MySQL 查询 (UNION) 有什么问题?

php - AJAX 和获取最近的数据库条目

sql - MySQL 未知列

mysql - 从表 WHERE 中选择 x

mysql查询: Select with joining first or default

MySQL - 在全文搜索中获取列的前 100 个字符(WHERE MATCH)

php - 分类列表打印查询结果

php - UNION 与 UNION ALL 的性能对比

mysql - SELECT COUNT(*) 和 SELECT true 在十亿行表中查找特定行之间的区别

mysql - 如何按星期几对项目进行计数和分组?