2015-10-13 67 views
3

我試圖創建一個WHERE子句隻影響一個字段而沒有其他字段的查詢。WHERE子句在一個字段上

樣品表:

+--------+---------+-------------+-------------+ 
| ID  | Name | COUNTRY  | LANG  | 
+--------+---------+-------------+-------------+ 
| 1  | Sami | UK   | English  | 
| 2  | James | Spain  | NULL  | 
| 3  | John | USA   | English  | 
| 4  | Alex | Greece  | NULL  | 
| 5  | Jane | Italy  | Italian  | 
+--------+---------+-------------+-------------+ 

我想創建一個查詢,其中所有的ID,其中LANG IS NOT NULL

想要的結果的所有ID的
2)計數的所有
1)計數:

ID_Count

+----------+----------------+ 
    | ID_COUNT | NOT_NULL_LANG | 
    +----------+----------------+ 
    | 5  | 3    | 
    +----------+----------------+ 
+0

我以爲我的編輯是一個有效的。 – Strawberry

+0

嘿Daniel,KevinKirkpatrick的答案是你應該接受的。它不會讓事情變得複雜...... – jarlh

回答

6

應該簡單地:

select count(id) id_count, count(lang) NOT_NULL_LANG FROM TABLE_NAME; 
  • 的COUNT()函數,最喜歡的所有SQL聚合函數,不包括NULL從計算
+0

你在這裏對我來說太快了!我會刪除我的答案。 – jarlh

+0

很好的答案! 。 。 – Matt

+1

哈 - 如果我的刷新是正確的話,15秒鐘:-)。以爲我被擊敗了,但意識到其他反應忽略了更直接的方法...似乎是一個很好的機會分享便捷的知識,根據SQL標準,幾乎所有的聚合函數都忽略NULL。 – KevinKirkpatrick

0

使用COUNTISNULLSUM功能。

SELECT COUNT(ID) AS ID_COUNT, 
COUNT(ID)-SUM(IFNULL(LANG, 1)) AS NOT_NULL_LANG 
FROM yourtable 

輸出

ID_COUNT NOT_NULL_LANG 
5   3 

SQL小提琴:http://sqlfiddle.com/#!9/458c9/6/0

+0

似乎是一種表達情感的辛苦方式。 – Strawberry