MySQL - 条件 SELECT 输出单独的列

MySQL - Conditional SELECT to output separate columns

我试图解决 MySQL 中一个看似简单的问题:我有一个由 3 个字段组成的 table,我想形成一个 return 字段的查询选择为 DISTINCT 和另外两列,当满足特定条件时,return 剩余两个字段的 COUNT。

为了说明(从左到右命名为 firstsecondthird 的列):

| VzokAAD | aaa | 0 |
| VziAAAT | bbb | 0 |
| VziAAAT | ccc | 1 |
| VziAAAT | ddd | 0 |
| W0cZAAT | eee | 1 |
| VziNAAT | fff | 1 |
| VzpqAAD | ggg | 1 |
| VzpqAAD | hhh | 1 |

我当前的查询结构如下:

SELECT DISTINCT(first) AS field_one, COUNT(second) 
FROM table WHERE third = 0 GROUP BY field_one;

所以上面的查询会return:

 | VzokAAD | 1 |
 | VziAAAT | 2 |

我可以将查询更改为如下形式:

SELECT DISTINCT(first) AS field_one, COUNT(second) 
FROM table WHERE third = 1 GROUP BY field_one;

它会 return:

 | VzpqAAD | 2 |
 | VziNAAT | 1 |
 | W0cZAAT | 1 |
 | VziAAAT | 1 |

如何将两个查询组合在一起,以便获得第一列 GROUPED 和 DISTINCT 以及另外两个列,其中 COUNT 分别为第三个 =1 和第三个 =0。

基本上是这样的(当然错了):

SELECT DISTINCT(first) AS field_one, COUNT(second WHERE third = 1) 
AS alpha, COUNT(second WHERE third = 0) AS beta FROM table GROUP BY field_one;

我尝试使用 CASE 和 IF 控制流函数,但我只设法获得在单个列中定义的结果。

感谢任何愿意伸出援手的人!

您可以在下面使用 UNION

SELECT first AS field_one, 
       COUNT(second) 
FROM table 
WHERE third = 0 
GROUP BY field_one;
UNION
SELECT first AS field_one, 
       COUNT(second) 
FROM table 
WHERE third = 1 
GROUP BY field_one;

还有IN怎么样?

SELECT DISTINCT(first) AS field_one, 
       COUNT(second) 
FROM table 
WHERE third IN(0, 1) 
GROUP BY field_one;

你可以这样做:

SELECT 
      first AS field_one, 
      (CASE WHEN third =0 THEN COUNT(second) END)AS count1, 
      (CASE WHEN third=1 THEN COUNT(second) END)AS count2
FROM my_table
WHERE third IN('0','1')
GROUP BY field_one

您可以简单地使用这个查询:

 select first , SUM(IF(third=0,1,0)) as Col_zero, SUM(IF(third=1,1,0)) as Col_one
 from table
 group by first;