У меня есть запрос, который
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) = 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, строка не возвращается.
@JoeTaras, ты прав. Невозможно получить выход с нулевым счетчиком
Вы можете добавить предложение имея, например:
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 ;
Однако лучше (с точки зрения производительности и ясности) фильтровать перед агрегацией.
Это невозможно, потому что нет api_name, у вас нет строки