2017-08-03 171 views
1

我正在將我的MySql查詢轉換爲我們正在面臨執行SUM聚合函數問題的項目之一的Vertica數據庫上運行。Vertica數據庫中的總和查詢

MySQL查詢:

SELECT event.plateNumber, event.plateCodeId, sum( event.sourceId 
in (1,2,3)) as 'sum' from event group by event.plateNumber, event.plateCodeId 
having sum( event.sourceId in (1,2,3)) > 0 ; 

我試圖運行Vertica的數據庫這個查詢,並具有以下例外。

錯誤:函數總和(布爾)不存在,或許可被拒絕總和(布爾)

當我們提到Vertica的documentation約SUM聚合函數,它看起來像有在功能上沒有區別簽名。

我試圖查看不同的網站,但不能得到任何幫助,以上面提到的MYSQL查詢轉換爲Vertica查詢。

任何人都可以幫忙嗎?

謝謝

回答

1

sum()謂詞由Vertica支持,但不支持布爾值。 您需要先將布爾值轉換爲數字。由於cast不知道如何將布爾轉換爲數字,所以最好的選擇是使用case。例如:

SELECT event.plateNumber, 
     event.plateCodeId, 
     sum( CASE WHEN event.sourceId in (1,2,3) THEN 1 ELSE 0 END) as 'sum' 
    FROM event 
    GROUP BY event.plateNumber, event.plateCodeId 
+0

我不想在有查詢結果和0列。 – Michael

+0

這對SUM謂詞應該沒有什麼不同,但是如果要用null替換0,則可以刪除語句的「ELSE 0」部分:sum(CASE WHEN event.sourceId in(1,2, 3)THEN 1 END)as'sum'。 –

+0

@mauro答案也是一樣的,確實更優雅 –

1

怎樣......

SELECT 
    event.plateNumber, 
    event.plateCodeId, 
    sum((event.sourceId in (1,2,3))::INTEGER) as 'sum' 
FROM 
    event 
GROUP BY 
    event.plateNumber, event.plateCodeId 
HAVING 
    sum((event.sourceId in (1,2,3))::INTEGER) > 0 ;