在經常在TSQL使用下面的查詢選擇所有列,和COUNT(*):如何在同一查詢
SELECT COUNT(*), *
FROM CUSTOMER c
WHERE c.Name like 'foo%';
當我嘗試在Oracle SQL Developer中它沒有執行這個查詢工作,並給我一個錯誤:
"Missing expression"
什麼是好的語法?
在此先感謝。
在經常在TSQL使用下面的查詢選擇所有列,和COUNT(*):如何在同一查詢
SELECT COUNT(*), *
FROM CUSTOMER c
WHERE c.Name like 'foo%';
當我嘗試在Oracle SQL Developer中它沒有執行這個查詢工作,並給我一個錯誤:
"Missing expression"
什麼是好的語法?
在此先感謝。
一種方法是做類似下面的事情。這將導致每行的計數(*)結果。但要小心,有一個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%'
這將有更好的表現:
SELECT COUNT(*) OVER(), c.*
FROM CUSTOMER c
WHERE c.Name like 'foo%';
解釋本來就不錯 – Blauhirn
@Blauhim,它是一個帶有空窗口子句的分析函數 - 因此它計算整個結果集的行數。它通常會表現得更好,因爲它應該只訪問一次表格的每個塊,對行進行計數。 –
@Jeffrey這很好,但它創建的每一行的額外列往往會導致比選擇計數(*)更多的開銷,特別是如果每個列都有一個聚合。是否有可能只有第一行有相同的聚合,並且不再爲每一行重複? – user3758745
你將不得不使用組..或合併兩個查詢的結果。 –
Plz提供你的表的模式.. –
我不相信這個語句在SQL Server中工作 –