Пропуск записей базы данных, если счетчик равен 0

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

 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

но мне не нужно получать имена apiname, у которых счетчик "0"

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

Это невозможно, потому что нет api_name, у вас нет строки

Joe Taras 18.12.2018 10:49

Ваш запрос правильный, ваш результат неверен.

Joe Taras 18.12.2018 11:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
112
6

Ответы 6

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

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

is api_name = 0, строка не возвращается.

Joe Taras 18.12.2018 10:49

@JoeTaras, ты прав. Невозможно получить выход с нулевым счетчиком

George Joseph 18.12.2018 11:08

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

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

Если вы имели в виду, что хотите, чтобы имя не отображалось на 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 

Предполагая, что 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 имеет числовой тип, вам не нужно использовать одинарные кавычки.

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

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
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), 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 ;

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

Другие вопросы по теме