【问题标题】:Count the same id with in one single column and other column have where clause在一个列中计算相同的 id,而另一列有 where 子句
【发布时间】:2017-09-14 16:27:11
【问题描述】:

我有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)
;

如果tgl_kondisi2017-09-13,我如何在count_tot 中生成将被循环的id 和包含where 子句的tgl_count1 列中的数量相加。我想要的结果是这样的:

+----------------+-------------+------------+
| 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 tgl_kondisi='2017-09-13', 1, 0) - 条件聚合.
  • 对不起。我的错。语法错误。 SELECT id, COUNT(id), SUM(CASE WHEN tgl_kondisi='2017-09-13' THEN 1 ELSE 0 END)
  • 我应该把tgl_kondisi放在哪里?它返回Unknown column 'tgl_kondisi' in 'field list'
  • 您需要在派生的merged_table中提供它
  • 哦,我明白了,它有效!谢谢@PM77-1

标签: mysql multiple-columns


【解决方案1】:

所以正确的查询应该是

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) 

我换了

SELECT COUNT(id) FROM kondisi WHERE 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2014-01-19
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2015-12-28
    • 2015-02-14
    相关资源
    最近更新 更多