2013-10-14 31 views
0

在SQL相等的值有一個表達方式計算有多少值從'x'不同:聚集數以恆定

SELECT COUNT(NULLIF(col, 'x')) FROM table 

我覺得不太優雅爲相同的值數到'x'

  • SELECT COUNT(*) - COUNT(NULLIF(col, 'x')) FROM table
  • SELECT SUM(CASE WHEN col = 'x' THEN 1 ELSE 0 END) FROM table
  • [預言]SELECT COUNT(DECODE(col,'x','x',NULL)) FROM table

有沒有更好的方法來做到這一點?

+3

爲什麼從表,其中列=「x''不'SELECT COUNT(*)? –

+0

@羅曼:你說得對,這個問題似乎很愚蠢。但在這裏,我需要在一個查詢中執行多個計數:'select count_if(col,'x'),count_if(col,'y'),count_if(col,'z')FROM table' – Benoit

+0

@Roman'select count(*)from table where col <>'x''不計算col爲null的行。 –

回答

4
SELECT 
    COUNT(CASE WHEN col='x' THEN 1 END) AS XCount, 
    COUNT(CASE WHEN col='y' THEN 1 END) AS YCount, 
    COUNT(CASE WHEN col='z' THEN 1 END) AS ZCount 
    FROM table 
+0

我喜歡這個,謝謝。 – Benoit

0

直接的方法是做了過濾的WHERE子句中:

SELECT COUNT(*) FROM table WHERE col = 'x' 

編輯:

如果您不能使用where子句(因爲要執行幾個方面在同一個SELECT ),那麼我認爲你自己建議的方式是最優雅的。 我的個人偏好是SUM(CASE WHEN...

+0

完美地回答了這個問題......但請參閱有關問題的評論,在同一個查詢中我需要多個計數。 – Benoit

0

味道是一個很個人的事情,我喜歡在Oracle使用此語法:

select sum(decode(text,'x',0,1)) 
from table