2017-10-16 101 views
0

我在一列中獲得了情緒分析的結果。我想展示一下每個數字代表和計數,像這樣:如何將不同查詢的結果合併爲一個?

Neg | Neutral | Pos 
---------+-----+----- 
    30 | 55 | 100 

我試過,我在互聯網上發現了許多不同的方法,但沒有成功。看起來db2語法經常變化,而且我發現的所有文檔都不適用於我當前的bluemix帳戶。

我能得到的最接近的是UNION:

SELECT COUNT(*) as NEGATIVE  FROM C7 WHERE SENTIMENT = 1 
union 
SELECT COUNT(*) as NEUTRAL  FROM C7 WHERE SENTIMENT = 2 
union 
SELECT COUNT(*) as Pos   FROM C7 WHERE SENTIMENT = 3 

然而,這給了我:

NEGATIVE 
-------- 
    30 
    55 
    100 

我如何可以結合每個查詢並排側的結果嗎?


我試圖從後樞轉在DB2的答案,但我得到了錯誤:

SELECT 
    C7.SENTIMENT, 
    COUNT(CASE WHEN C7.SENTIMENT = 1 THEN Value END) AS NEGATIVE, 
    COUNT(CASE WHEN C7.SENTIMENT = 2 THEN Value END) AS NEUTRAL, 
    COUNT(CASE WHEN C7.SENTIMENT = 3 THEN Value END) AS POSITIVE, 
FROM C7 
GROUP BY C7.SENTIMENT 

SQL0206N:SQL0206N 「VALUE」 是不是在使用它的上下文中無效。 SQLSTATE = 42703

SELECT DISTINCT 
    C7.SENTIMENT, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 1) AS VERY_NEGATIVE, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 2) AS NEGATIVE, 
    (SELECT value FROM C7 WHERE C7.SENTIMENT = 3) AS NEUTRAL 
FROM C7 

SQL0206N:SQL0206N 「VALUE」 不是在其被使用的上下文中有效。 SQLSTATE = 42703

+1

可能重複的[DB2中的透視](https://stackoverflow.com/questions/15529107/pivoting-in-db2) –

+0

@ Clockwork-Muse Nope,嘗試所有這些答案,非工作,將更新我的文章爲什麼不是這樣。不管怎麼說,還是要謝謝你。 –

+0

它可能認爲'VALUE'在這裏被用作關鍵字(因爲它是一個保留字,儘管它至少可以在某些情況下用作列名)。但是除非你試圖引用的內容可以爲null,你不在乎它是什麼,所以你可以用一個常量值('1'是一個最喜歡的值)。 (從我的經驗專欄 - 沒有發現產生一個不同的例外,所以不可能源於此) –

回答

1

好了,再處理幾個答案後,我終於得到了我一直在尋找:

SELECT DISTINCT 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 1) AS NEGATIVE, 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 2) AS NEUTRAL, 
    (SELECT COUNT(SENTIMENT) FROM C7 WHERE C7.SENTIMENT = 3) AS POSITIVE 
FROM C7 

這看起來像是我徘徊在很長一段時間,但不能因爲有些帖子用奇怪的表名和價值觀來回答這個問題。

所以基本上,要獲得彼此相鄰的查詢,您必須使用多個SELECT s。

此外,請注意我使用DISTINCT,否則它會爲我的數據庫中的每一行都提供相同數據的副本。

+0

....'DISTINCT'是不必要的,因爲如果你走這條路線,你應該做一些不同的事情,或者把所有這三個都放到'VALUES'語句中,或者使用虛擬表('sysibm。sysdummy1')給自己一行。如果幸運的話,系統能夠查看該查詢並優化「DISTINCT」,否則你只是在懲罰自己。 –

+0

@ Clockwork-Muse確定,發佈一個答案。 –

相關問題