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