我有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_kondisi
的 tgl_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/