2017-02-01 29 views
-3

我想總結一下場,如果條件字段ID是複製它只能算作1和應用程序ID等於1這是什麼有效的語法查詢?

SELECT SUM(IF(PU.field_id IS DISTINCT AND PU.app_id =1,1,0)) as "With Reco" FROM tbl.PutUser. 

我知道一些,這只是小菜一碟。

+2

我想你應該問樣品數據和預期結果的另一個問題。 –

+1

示例數據和預期輸出可以更好地說明您嘗試實現的內容。 – spencer7593

回答

1

我們可以使用MySQL特定IF()功能,

SELECT COUNT(DISTINCT IF(pu.app_id=1,pu.field_id,NULL)) AS `With Reco` 
    FROM mytable pu 

或等效的,更多的ANSI標準兼容CASE表達

SELECT COUNT(DISTINCT CASE WHEN pu.app_id=1 THEN pu.field_id END) 

返回NULL待條件成熟時,我們要AREN測試」不滿意,否則返回表達式(field_id),我們希望得到條件滿足時的不同值的計數。然後我們可以在COUNT(DISTINCT)聚合中包裝表達式。

爲了進行測試,跌落COUNT(DISTINCT)彙總,並返回各行...

SELECT pu.app_id 
    , pu.field_id 
    , IF(pu.app_id=1,pu.field_id,NULL) AS foo 
    FROM mytable pu 
ORDER BY ... 
LIMIT 80 

這是我最好的你所要求的理解。

app_id field_id foo 
------ -------- ----- 
1  sam  sam 
0  sam  NULL 
1  sam  sam 
2  bob  NULL 
NULL bugs  NULL 

如果這不是你所要求的,考慮提供一些示例數據和預期的查詢輸出。

+0

完美,正是我所期待的。 –