2013-05-08 5 views
3

Я этот запрос, который извлекает строку из таблицы и количества строк, что запрос собирается возврат:запроса для выбора COUNT (*) и столбцов

SELECT tab.*, 
     (SELECT Count(*) 
     FROM mytable mtb 
     WHERE mtb.name = 'XYZ' 
       AND mtb.TYPE = 'TP') 
FROM mytable tab 
WHERE tab.name = 'XYZ' 
     AND tab.TYPE = 'TP' 

Теперь, если вы видите, я просто хочу, количество строк, возвращаемых основным запросом со всеми остальными столбцами. Мне нужно использовать этот запрос в качестве подзапроса в очень большом запросе. Теперь я хочу знать, есть ли лучший способ написать этот запрос. Я имею в виду, что мы повторяем запрос, чтобы получить счет отдельно. Так можете ли вы предоставить более оптимизированную форму

ответ

7

Вы должны использовать аналитическую функцию count():

select tab.*, count(*) over() as totalcnt 
from mytable tab 
where tab.name = 'XYZ' and tab.type = 'TP' 
+0

Не COUNT (*) OVER() так же, как обычный COUNT (*)? – kyooryu

+3

@kyooryu: нет это не так. «Обычный» счет с дополнительными столбцами потребует «GROUP BY» в этих столбцах. –

+0

На самом деле после некоторого тестирования я обнаружил, что я действительно нуждался в 'count (*) over (partition by name, type)'! Большое спасибо за помощь в освоении новых команд :) – MozenRath

Смежные вопросы