Я ищу способ показать результаты запроса на основе подсчета. У меня есть следующее:
# Returns expected number
SELECT systems.hostname AS Hostname, systems.date AS "Last Checked In", count(systems2updates.2package) AS "Needed Updates"
FROM systems2updates RIGHT JOIN systems on systems2updates.2hostname=systems.hostname
GROUP BY systems.hostname;
# Shows all entires, including those with 0
SELECT systems.hostname AS Hostname, systems.date AS "Last Checked In", count(systems2updates.2package) AS "Needed Updates" FROM systems2updates
RIGHT JOIN systems on systems2updates.2hostname=systems.hostname
WHERE "Needed Updates" > 0
GROUP BY systems.hostname;
# Returns nothing
SELECT systems.hostname AS Hostname, systems.date AS "Last Checked In", count(systems2updates.2package) AS "Needed Updates"
FROM systems2updates RIGHT JOIN systems on systems2updates.2hostname=systems.hostname WHERE "Needed Updates" = 0
GROUP BY systems.hostname;
Любая помощь была высоко оценена. Спасибо.
Я предполагаю, что вы хотите возвращать строки, где значение COUNT больше определенного значения? В этом случае предложение HAVING является самым простым способом. Например:
SELECT sampleValue, COUNT(*)
FROM dbo.SomeTable
GROUP BY sampleValue
HAVING COUNT(*) > 5
Обратите внимание, что HAVING не работает хорошо, и вы можете посмотреть альтернативное решение, используя функцию ROW_NUMBER().
WHERE
ограничивает записи, которые вы используете. Результат агрегации "Needed Updates"
в данный момент не существует. Если вы хотите отфильтровать результаты агрегации, используйте HAVING
:
...
GROUP BY systems.hostname
HAVING "Needed Updates" = 0;
BTW: MySQL позволяет использовать псевдонимы столбцов в HAVING
. Однако это не допускается в стандартном SQL, где вам нужно будет GROUP BY count(systems2updates.2package)
.
UPDATE: MySQL не всегда соответствует стандарту, когда речь заходит о цитатах. Имена псевдонимов в двойных кавычках могут быть взяты для строки MySQL. Лучше избегайте таких псевдонимов.
select
s.hostname as hostname,
s.date as last_checked_in,
count(su.2package) as needed_updates
from systems s
left join systems2updates su on su.2hostname = s.hostname
group by s.hostname
having count(su.2package) = 0;
needed_updates
кавычки, например, использовать needed_updates
.