mysql выберите количество для нескольких условий - PullRequest
0 голосов
/ 15 января 2020

У меня есть таблица, содержащая элементы.

Каждый элемент имеет своего родителя 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 с несколькими столбцами.

Как включить условный счетчик с несколькими столбцами?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Полагаю, вы имеете в виду, что все еще существующие записи должны иметь значение deletetion_date 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
1 голос
/ 15 января 2020

Вы пытаетесь сделать?

sum( if(deletion_date is null and number_of_lines!=0, 1, 0) )
...