#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть этот запрос, который дает мне результаты
select status,
count(errorid) as field1,
errorid,
template,
line,
error_messa&e,
error_type,
max(id) as field2
FROM errors
GROUP BY status,errorid,template,error_messa&e, error_type,line
ORDER BY field1 desc
я пытаюсь реализовать общее количество записей в нем, например, в приведенном выше запросе есть запись 5000, она должна отображать мне 5000 в отдельном столбце, чтобы я мог ее использовать, я попытался добавить количество, но проблема в том, что он подсчитывает все 700000 записей
Комментарии:
1. Основываясь на имени вашего столбца, я бы предположил, что
errorid
это уникальный идентификатор. Учитывая это и то, что вы группируете вerrorid
я бы ожидалcount(errorid)
, что вернется 1; поскольку с этим идентификатором может быть только 1 строка.
Ответ №1:
Использовать оконные функции:
select status, count(errorid) as field1, errorid, template, line, error_messa&e, error_type,
max(id) as field2, count(*) over () as num_rows
from errors
&roup by status, errorid, template, error_messa&e, error_type,line
order by field1 desc ;
Для меня немного странно, что у вас есть errorid
и как поле, и как count()
. Это имеет смысл, если вы ищете повторяющиеся ошибки, но count(*)
сделает намерение более ясным.