我有一个包含元素的表格。
每个元素都有其父instance_id
,即number_of_lines
代码,
以及删除时的deletion_date
。
我构建了一个查询,用于对按实例分组的元素进行计数,其中包含具有代码(number_of_lines
不为零)的元素和已删除的元素(deletion_date
不为空)的元素总数)
SELECT instance_id,
COUNT(id) AS elementsfound,
COUNT(NULLIF(number_of_lines,0)) AS havecode,
(COUNT(id)-COUNT(NULLIF(number_of_lines,0))) AS havenocode,
COUNT(deletion_date) AS beenremoved,
(COUNT(id)-COUNT(deletion_date)) AS stillexistent
FROM elements
GROUP BY instance_id
我得到了正确的结果(缩写)
+-------------+---------------+----------+------------+-------------+---------------+
| instance_id | elementsfound | havecode | havenocode | beenremoved | stillexistent |
+-------------+---------------+----------+------------+-------------+---------------+
| 59 | 93123 | 24109 | 69014 | 45397 | 47726 |
| 69 | 46399 | 7837 | 38562 | 23929 | 22470 |
| 71 | 41752 | 8746 | 33006 | 6960 | 34792 |
| 75 | 29097 | 4303 | 24794 | 13670 | 15427 |
| 77 | 41681 | 9858 | 31823 | 10540 | 31141 |
| 79 | 17800 | 695 | 17105 | 13391 | 4409 |
| 82 | 25323 | 2481 | 22842 | 20914 | 4409 |
| 83 | 12831 | 2544 | 10287 | 2988 | 9843 |
...
现在,我想添加一列,其中包含每个实例的元素数量,两者仍然存在(deletion_date
为空)和有代码(number_of_lines
不为零)
我找不到添加具有多列的 NULLIF
或 CASE WHEN
的方法。
如何包含多列条件计数器?
最佳答案
我假设您的意思是仍然存在的记录应该删除日期为NULL。
试试这个:
SELECT instance_id,
COUNT(id) AS elementsfound,
COUNT(NULLIF(number_of_lines,0)) AS havecode,
(COUNT(id)-COUNT(NULLIF(number_of_lines,0))) AS havenocode,
COUNT(deletion_date) AS beenremoved,
(COUNT(id)-COUNT(deletion_date)) AS stillexistent,
COUNT(IF(deletion_date IS NULL AND number_of_lines > 0, 1, NULL)) existentwithcode
FROM elements
GROUP BY instance_id
关于mysql select count 多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756147/