2017-04-15 60 views
0

計數我有一個表,其中有一部分看起來像this.在哪裏範圍之外的MySQL Reurn值以0

我想算,每VideoName其0到60之間我有價值觀中cuePoints的數量我正在使用此查詢來執行此操作

`SELECT VideoName,COUNT(CuePoint) AS min1 
    FROM text_xml 
    WHERE CuePoint >= 0 and Cuepoint <= 60 
    GROUP BY VideoName;` 

它適用於該purpese,但是有些視頻在該範圍內沒有提示點。因此這些視頻不會從查詢中返回。

我的問題是如何讓查詢返回所有視頻,包括那些在該範圍內沒有提示點的視頻。我希望它們的計數爲0。像這樣的min1:'0'。

+0

'提示點> = 0和提示點<= 60'可被寫爲'0線索點和之間60' –

回答

1

嘗試這種情況:

SELECT VideoName, SUM(IF(CuePoint >= 0 AND CuePoint <= 60, 1, 0)) AS min1 
FROM text_xml 
GROUP BY VideoName;` 
2

這可以通過移動where條件成case when表達式,算上做:

SELECT VideoName, 
     COUNT(CASE WHEN CuePoint >= 0 and Cuepoint <= 60 THEN 1 END) AS min1 
FROM text_xml 
GROUP BY VideoName; 

count將計數的非空值的表達式的數量。由於表達式只在條件爲真時產生1,所以這些將是被計數的那些。在其他情況下,表達式產生不會增加計數的null。所以對於那些你會得到0.

請注意,這是符合標準的SQL。 MySql將允許Gordon提供的稍短一些的語法。

1

您可以將條件移至SELECT。在MySQL中,我會這樣做:

SELECT VideoName, SUM(CuePoint >= 0 and Cuepoint <= 60) AS min1 
FROM text_xml 
GROUP BY VideoName; 

MySQL將數字上下文中的整數視爲布爾表達式。 「1」爲真,「0」爲假。所以,這個SUM()返回表達式計算結果爲true的行數。