Sql 根据案例和分组结果创建一个新列

Sql 根据案例和分组结果创建一个新列,sql,mariadb,Sql,Mariadb,我有这样一个表,叫做表测试: 我想按id_laporan_rekomendasi分组,并在列状态中有值3时创建一个新列。因此,如果列状态中没有值3,则该值将为0,但如果值3大于1 我希望结果会是这样 +------------------------+------+ | id_laporan_rekomendasi | test | +------------------------+------+ | 1 | 1 | |

我有这样一个表,叫做表测试:

我想按id_laporan_rekomendasi分组,并在列状态中有值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 |
+------------------------+------+

有人能帮我摆好这张桌子吗?

很接近了。在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。这就是你想要的。

COUNT。。。把一切都算在。。。除了空值。也就是说,0被计算在内。
SELECT t1.id_laporan_rekomendasi, 
       MAX( t1.status = 3 ) as test
FROM test t1
GROUP BY t1.id_laporan_rekomendasi;