mysql - 计算一个列中相同的 id,而其他列有 where 子句

标签 mysql multiple-columns

我有question就像这样并已得到答复。

现在,我有一个新列,但同一个表(现在有日期)

+------------+----------------+-------------+
| id_kondisi | id_sub_kondisi | tgl_kondisi |
+------------+----------------+-------------+
| 01         | 0102           | 2017-09-13  |
| 03         | 0302           | 2017-09-13  |
| 01         | 0101           | 2017-09-13  |
| 01         | 0102           | 2017-09-13  |
| 01         | 0101           | 2017-09-13  |
| 03         | 0301           | 2017-09-13  |
| 03         | 0303           | 2017-09-13  |
| 02         | 0202           | 2017-09-14  |
| 01         | 0102           | 2017-09-13  |
| 03         | 0301           | 2017-09-13  |
| 01         | 0101           | 2017-09-13  |
| 02         | 0203           | 2017-09-14  |
| 03         | 0302           | 2017-09-13  |
| 02         | 0202           | 2017-09-14  |
| 02         | 0201           | 2017-09-14  |
| 02         | 0202           | 2017-09-14  |
+------------+----------------+-------------+

查询

CREATE TABLE kondisi
    (`id_kondisi` int, `id_sub_kondisi` int, `tgl_kondisi` date)
;

INSERT INTO kondisi
    (`id_kondisi`, `id_sub_kondisi`, `tgl_kondisi`)
VALUES
    (01, 0102, 2017-09-13),
    (03, 0302, 2017-09-13),
    (01, 0101, 2017-09-13),
    (01, 0102, 2017-09-13),
    (01, 0101, 2017-09-13),
    (03, 0301, 2017-09-13),
    (03, 0303, 2017-09-13),
    (02, 0202, 2017-09-14),
    (01, 0102, 2017-09-13),
    (03, 0301, 2017-09-13),
    (01, 0101, 2017-09-13),
    (02, 0203, 2017-09-14),
    (03, 0302, 2017-09-13),
    (02, 0202,  2017-09-14),
    (02, 0201,  2017-09-14),
    (02, 0202, 2017-09-14)
;

如何在 count_tot 中对已循环的 id 数量和包含 where 子句 if tgl_kondisitgl_count1 列中的 id 进行求和是2017-09-13。我想要的结果是这样的:

+----------------+-------------+------------+
| kondisi_tot    | coun_tot    |tgl_count1  |
+----------------+-------------+------------+
| 01             |  6          |  6         |
| 0101           |  3          |  3         |
| 0102           |  3          |  3         |
| 02             |  5          |  0         |
| 0201           |  1          |  0         |
| 0202           |  3          |  0         |
| 0203           |  1          |  0         |
| 03             |  5          |  5         |
| 0301           |  2          |  2         |
| 0302           |  2          |  2         |
| 0303           |  1          |  1         |
+----------------+-------------+------------+

我做过类似的事情,但没有成功

select id, count(id), (select count(id) from kondisi where tgl_kondisi='2017-09-13') 
from 
(select id_kondisi as id from kondisi
union all
select id_sub_kondisi from kondisi) merged_table
group by id
order by cast(id as char) 

最佳答案

所以正确的查询是

SELECT 
     id, 
     COUNT(id), 
     SUM(
          CASE WHEN 
               tgl_kondisi='2017-09-13' THEN 1 ELSE 0 END
FROM 
(   SELECT 
         id_kondisi as id,
         tgl_kondisi
    FROM kondisi
           UNION ALL

    SELECT 
         id_sub_kondisi,
         tgl_kondisi
    FROM kondisi
) 
merged_table
GROUP BY id
ORDER BY cast(id as char) 

我改变了

从 kondisi 中选择 COUNT(id),其中 tgl_kondisi='2017-09-13')

进入

SELECT id, COUNT(id), SUM(CASE WHEN tgl_kondisi='2017-09-13' THEN 1 ELSE 0 END

并在两个UNION表中添加tgl_kondisi

感谢PM77-1

关于mysql - 计算一个列中相同的 id,而其他列有 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224159/

相关文章:

mysql - 如何在数据库中随机字母列表的每个字母后添加逗号

mysql命令行sql执行之谜,只考虑部分字符串

r - 匹配不同数据框上的多列并获得其他列作为结果

css - 难以创建具有多列的 CSS 菜单

pandas - 替换列名称中的部分字符串

css - 将列表项显示为列

MySQL:总结两条语句

php - 为什么我应该将 REMOTE 和 FORWARDED 都存储为用户的 IP?

mysql - 笛卡尔积过多,导致查询运行速度变慢

html - 如何修复 bootstrap 对齐文本列中的空格?