2017-10-16 13 views
0

感情分析の結果は1つの列にあります。異なるクエリの結果を1つに結合する方法は?

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

OK、ので、いくつかの答えを再加工した後、私は最終的に私が探していたものだ。

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を使用する必要があります。

また、私はDISTINCTを使用しました。そうでないと、データベースのすべての行に同じデータのコピーが与えられていたからです。

+0

.... 'DISTINCT'は不要です。もしあなたがこのルートを行っているならば、それらの3つ全てを' VALUES'文に入れるか、ダミーテーブル( 'sysibm。sysdummy1')を使って自分自身に単一の行を与えます。もしあなたが運が良ければ、システムはそのクエリを見て、 'DISTINCT'を最適化することができます。そうでなければ、自分自身にペナルティを課すだけです。 –

+0

@ Clockwork-Muse OK、回答を投稿してください。 –