2013-06-19 2 views
17

В часто используют в TSQL следующий запрос:Как выбрать все столбцы и COUNT (*) в том же запросе

SELECT COUNT(*), * 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 

Когда я пытаюсь выполнить этот запрос в Oracle SQL Developer это не работает и бросает мне сообщение об ошибке:

"Missing expression"

Каков хороший синтаксис?

Заранее спасибо.

+0

вам придется использовать группу по .. или объединить результат двух запросов. –

+1

Plz предоставляет схему вашей таблицы. –

+0

Я не верю, что оператор работает в SQL Server. –

ответ

4

Один из подходов - сделать что-то вроде следующего. Это приведет к результату count (*) для каждой строки. Но будьте осторожны, есть Cartesianjoin; если у вас много строк, таких как «foo%», это будет плохо работать.

select a.cntr, c.* 
from CUSTOMER c 
    , (select count(*) cntr 
    from customer b 
    where b.name like 'foo%') a 
where c.name like 'foo%' 
34

Это будет работать лучше:

SELECT COUNT(*) OVER(), c.* 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 
+7

объяснение было бы хорошо – Blauhirn

+2

@Blauhim, это аналитическая функция с пустой категорией окна - поэтому она вычисляет количество строк по всему набору результатов. Обычно он будет работать лучше, потому что он должен посещать каждый блок таблицы один раз, считая строки по мере их появления. –

+0

@Jeffrey Это хорошо, но дополнительные столбцы для каждой создаваемой строки имеют тенденцию вызывать больше накладных расходов, чем выборка count (*), особенно если у вас есть совокупность для каждого столбца. Возможно ли иметь тот же самый агрегат, что и первая строка, и не повторяется снова для каждой строки? – user3758745

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