MySQL - 条件 SELECT 输出单独的列
MySQL - Conditional SELECT to output separate columns
我试图解决 MySQL 中一个看似简单的问题:我有一个由 3 个字段组成的 table,我想形成一个 return 字段的查询选择为 DISTINCT 和另外两列,当满足特定条件时,return 剩余两个字段的 COUNT。
为了说明(从左到右命名为 first、second 和 third 的列):
| 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;
我试图解决 MySQL 中一个看似简单的问题:我有一个由 3 个字段组成的 table,我想形成一个 return 字段的查询选择为 DISTINCT 和另外两列,当满足特定条件时,return 剩余两个字段的 COUNT。
为了说明(从左到右命名为 first、second 和 third 的列):
| 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;