如何将不同查询的结果合并为一个?
我在一列中获得了情绪分析的结果。我想展示一下每个数字代表和计数,像这样:如何将不同查询的结果合并为一个?
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
好了,再处理几个答案后,我终于得到了我一直在寻找:
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
,否则它会为我的数据库中的每一行都提供相同数据的副本。
....'DISTINCT'是不必要的,因为如果你走这条路线,你应该做一些不同的事情,或者把所有这三个都放到'VALUES'语句中,或者使用虚拟表('sysibm。sysdummy1')给自己一行。如果幸运的话,系统能够查看该查询并优化“DISTINCT”,否则你只是在惩罚自己。 –
@ Clockwork-Muse确定,发布一个答案。 –
可能重复的[DB2中的透视](https://*.com/questions/15529107/pivoting-in-db2) –
@ Clockwork-Muse Nope,尝试所有这些答案,非工作,将更新我的文章为什么不是这样。不管怎么说,还是要谢谢你。 –
它可能认为'VALUE'在这里被用作关键字(因为它是一个保留字,尽管它至少可以在某些情况下用作列名)。但是除非你试图引用的内容可以为null,你不在乎它是什么,所以你可以用一个常量值('1'是一个最喜欢的值)。 (从我的经验专栏 - 没有发现产生一个不同的例外,所以不可能源于此) –