根据CASE和GROUP BY结果创建一个新列

时间:2018-03-12 12:20:24

标签: sql mariadb

我有这样的表名为table test

+------------------------+--------+
| id_laporan_rekomendasi | status |
+------------------------+--------+
|                      1 |      2 |
|                      1 |      2 |
|                      1 |      2 |
|                      1 |      3 |
|                      2 |      2 |
|                      2 |      2 |
|                      2 |      2 |
|                      2 |      3 |
|                      3 |      2 |
|                      3 |      3 |
|                      4 |      2 |
|                      5 |      2 |
|                      5 |      3 |
|                      6 |      2 |
+------------------------+--------+

我希望按id_laporan_rekomendasi进行分组,并在列status中创建一个新列,其值为3。因此,如果列状态中没有值3,则值为0,但如果值3而不是1

我希望结果会像这样

+------------------------+------+
| id_laporan_rekomendasi | test |
+------------------------+------+
|                      1 |    1 |
|                      2 |    1 |
|                      3 |    1 |
|                      4 |    0 |
|                      5 |    1 |
|                      6 |    0 |
+------------------------+------+

我试过这个查询

SELECT t1.id_laporan_rekomendasi, 
COUNT(distinct case when t1.status = 3 then 1 else 0 end) as test
FROM test t1
GROUP BY t1.id_laporan_rekomendasi

但我得到的结果如下

+------------------------+------+
| id_laporan_rekomendasi | test |
+------------------------+------+
|                      1 |    2 |
|                      2 |    2 |
|                      3 |    2 |
|                      4 |    1 |
|                      5 |    2 |
|                      6 |    1 |
+------------------------+------+

有没有人可以帮我这张桌子?

1 个答案:

答案 0 :(得分:4)

你很亲密。在MariaDB中,您可以将其简化为:

SELECT t1.id_laporan_rekomendasi, 
       MAX( t1.status = 3 ) as test
FROM test t1
GROUP BY t1.id_laporan_rekomendasi;

MariaDB(和MySQL)将布尔表达式视为数字,“1”表示true,“0”表示false。所以这就是你想要的。