Как вы подсчитываете строки в SQL-запросе, которые уже использовали count, group by и имея раньше? - PullRequest
5 голосов
/ 29 октября 2008

Например, используя ответ на этот вопрос:

Как выбрать всех пользователей, которые подали более 10 заявок «Как выбрать всех пользователей, которые сделали более 10 заявок.»

select userId
from submission   
group by userId
having count(submissionGuid) > 10

Допустим, теперь я хочу знать много строк, которые выводил этот оператор sql. Насколько масштабируемым является решение для подсчета рядов?

Ответы [ 3 ]

12 голосов
/ 29 октября 2008

Небольшая ошибка в ранее опубликованном примере, нужен псевдоним для имени таблицы для подзапроса:


select count(*) from
  (select userId
   from submission 
   group by userId
   having count(submissionGuid) > 10) t

Я не уверен насчет масштабируемости, но это решение. Если для вас это недостаточно хорошо масштабируется, вам необходимо рассмотреть серьезные изменения в дизайне, например, отслеживать тех, кто отправил более 10 заявок в отдельную таблицу, которую вы обновляете, через приложения, которые заполняют заявки. Или много других возможных решений.

5 голосов
/ 29 октября 2008

Вложенные запросы:

select count(*) from
  (select userId
   from submission   
   group by userId
   having count(submissionGuid) > 10) n

Отредактировано для включения комментария mbrierst о необходимости псевдонима ("n" в конце) для вложенного подзапроса Oracle не требует этого, но SQL Server делает это. Не стесняйтесь добавлять комментарии относительно использования на других платформах базы данных.

3 голосов
/ 29 октября 2008

В SQL Server вы можете сделать

select @@ROWCOUNT 

сразу после отправленного вами запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...