пропуск записей базы данных, если счетчик равен 0 - PullRequest
0 голосов
/ 18 декабря 2018

У меня запрос, который

 select count(api_name),api_name from abc_log where id = '1'
 group by api_name 

в порядке, и я получаю правильный результат.

Предположим, мой вывод

 count       api_name

   1          abc
   10         123
   12         aaa
   0          xxx

, но я не делаю 'Мне нужно получить apinames, которые имеют количество '0'

Как мне написать запрос?Заранее спасибо ..

Ответы [ 6 ]

0 голосов
/ 18 декабря 2018

Этот запрос:

select count(api_name), api_name 
from abc_log
where id = 1  -- guessing that id is a number
group by api_name ;

может только вернуть 0 для счета, когда api_name равно NULL.Это не произойдет для значения "xxx".

Я предполагаю, что ваш запрос более сложный.

Для этого запроса я бы порекомендовал:

select count(api_name), api_name 
from abc_log
where id = 1 and -- guessing that id is a number
      api_name is not null
group by api_name ;

Более общее решение - использовать having (на что другие ответили):

select count(api_name), api_name 
from abc_log
where id = 1 and -- guessing that id is a number
      api_name is not null
group by api_name
having count(api_name) > 0 ;

Однако лучше (с точки зрения производительности и ясности) фильтровать перед агрегацией.

0 голосов
/ 18 декабря 2018
select count(api_name),api_name from abc_log where id = '1'
 group by api_name 
having count(api_name) > 0 

Попробуйте.Запрос Джорджа тоже будет работать нормально.

0 голосов
/ 18 декабря 2018

Вы также можете рассмотреть следующие вопросы:

with T as (
    select count(api_name) count, api_name
    from abc_log
    where id = '1'
    group by api_name
)
select *
from T
where count > 0
0 голосов
/ 18 декабря 2018

Предполагая, что api_name имеет значение null, вы можете просто отфильтровать его:

select count(api_name), api_name 
from abc_log 
where id = 1 and api_name is not null
group by api_name; 

Если id имеет числовой тип, вам не нужно использовать одинарные кавычки.

0 голосов
/ 18 декабря 2018

Вы можете добавить с предложением , например:

select count(api_name),api_name from abc_log where id = '1'
group by api_name 
having count(api_name) > 0

Если вы хотели, чтобы имя было пустым, то попробуйте этот запрос:

select count(api_name) count, 
  CASE count WHEN >0 THEN api_name ELSE ' ' END
from abc_log 
where id = '1'
group by api_name 
0 голосов
/ 18 декабря 2018

Просто добавьте условие для фильтрации отсчета (api_name) = 0

select count(api_name),api_name from abc_log where id = '1'
 group by api_name 
having count(api_name) <> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...