2015-11-17 186 views
0

採取以下語句:多重條件在SELECT

SELECT SUM(IF(talktime > 4 AND status = 'answer' , 1, 0)) as count FROM table 

輸出應該指望能夠滿足這兩項條件的行。

該陳述是否有效?

編輯:

我很感興趣,在IF多個條件的一部分。

+3

是的,它是有效的。你可以執行它並自己看! –

+1

這個評論和回答非常具有諷刺意味。查詢將*不*按照書面形式運行。 –

+0

@GordonLinoff:名字'count'和'table'只是爲了這個例子:)但我會離開他們,因爲你提出了很好的觀點。我對@alex的多重條件部分 – alex

回答

1

本聲明:

SELECT SUM(IF(talktime > 4 AND status = 'answer' , 1, 0)) as count 
FROM table 

是一種正確的,帶警告:

  • table不允許作爲表名,因爲它是一個保留字。它需要被轉義。
  • count是列名一個糟糕的選擇,因爲它是一個內置的函數名

您還可以簡化查詢,因爲不需要在MySQL中if()

SELECT SUM(talktime > 4 AND status = 'answer') as cnt 
FROM `table`; 

當然,您可以將比較邏輯移動到WHERE子句,但這與原始查詢保持相同的結構。

2

IF(表達式1,表達式2,表達式3)

如果表達式1爲真,那麼IF()返回表達式2;否則它返回expr3

因此,當條件滿足時,上述代碼將返回1,否則返回0。 所以計數將是No. of rows satisfying the condition


例如,

如果要顯示total no .of callstotal no of short callstotal no of long calls(假設talktime長度呼叫持續時間的)。

SELECT SUM(IF(talktime > 4 , 1, 0)) as No_of_Long_Calls, 
      SUM(IF(talktime < 4 , 1, 0)) as No_of_Short_Calls, 
      COUNT(*) AS Total_Calls 
    FROM table_name 
    WHERE status = 'answer' 

贊成票這是一個有效的SELECT語句中, 100%它會奏效。

希望這會有所幫助。

2

爲什麼不

SELECT COUNT(*) FROM table WHERE talktime > 4 AND status = 'answer' 

0

你可以這樣做,使用此:

SELECT COUNT(id) count FROM table WHERE talktime > 4 AND status = 'answer'; 

我真的不明白你爲什麼會以其他任何方式做到這一點,但是,是的,你的代碼應該工作正常。