Сгруппируйте и проверьте значение для этой группы в кусте / sql - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица с данными ниже.

id start     current
1  today     True
2  yesterday False
1  Monday    False
3  yesterday True
3  Monday    False
4  today     
4  Tuesday   
5  Wednesday True
6  Friday    
6  Monday    
7  Sunday    True
7  Tuesday   

Я хочу проверить, сколько идентификаторов содержит все нули в текущем столбце, и напечатать это количество.

Я думал об использовании группыпо id и выберите идентификаторы, где current равен нулю, но не дает соответствующего количества.Я хочу посчитать, только если все строки для конкретного идентификатора содержит текущий как ноль.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать для этого пункт-предложение.«Найти количество отдельных id, которые не имеют строк, имеющих значение current, отличное от NULL»

select count(distinct d.id)
from data d
where not exists (
  select *
  from data d2
  where d2.id=d.id and d2.current is not null
)

См. SQLFiddle

0 голосов
/ 24 сентября 2018

Попробуйте это: http://sqlfiddle.com/#!9/31f6e/12

select count(distinct start)
from 
(
select start,max(case when current is not null then 1 else 0 end) mt
from data
group by start)a where mt=0
0 голосов
/ 24 сентября 2018
  • Сначала найдите все идентификаторы, для которых MAX(current) равно NULL.
  • Затем просто подсчитайте их.

Попробуйте следующий запрос (будет работать в MySQL):

SELECT COUNT(DISTINCT IF(derived_t.max_current IS NULL, 
                         derived_t.id, 
                         NULL)) AS ids_with_all_null
(
SELECT id, MAX(current) as max_current 
FROM your_table 
GROUP BY id
) AS derived_t
...