Db2 如何将不同查询的结果合并为一个?
我在一篇专栏文章中有情绪分析的结果。我想展示每个数字代表的内容和计数,如下所示:Db2 如何将不同查询的结果合并为一个?,db2,Db2,我在一篇专栏文章中有情绪分析的结果。我想展示每个数字代表的内容和计数,如下所示: Neg | Neutral | Pos ---------+-----+----- 30 | 55 | 100 我在互联网上找到了许多不同的方法,但都没有用。db2语法似乎经常更改,我发现的所有文档在我当前的bluemix帐户上都不起作用 我能得到的最接近的是工会: SELECT COUNT(*) as NEGATIVE FROM C7 WHERE SENTIMENT = 1 u
Neg | Neutral | Pos
---------+-----+-----
30 | 55 | 100
我在互联网上找到了许多不同的方法,但都没有用。db2语法似乎经常更改,我发现的所有文档在我当前的bluemix帐户上都不起作用
我能得到的最接近的是工会:
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中尝试了post-Pivoting的答案,但出现了错误:
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“值”在使用它的上下文中无效。SQLSTATE=42703
SQL0206N:SQL0206N“值”在使用它的上下文中无效。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
,因为否则它会为我的数据库中的每一行提供相同数据的副本。可能重复@Clockwork Muse Nope,尝试了所有这些答案,未工作,将更新我的帖子,并说明原因。无论如何,谢谢。它可能认为VALUE
在这里被用作关键字(因为它是一个保留字,但至少在某些上下文中可以用作列名)。但是,除非您试图引用的内容可以为null,否则您不关心它包含什么,因此可以替换常量值(1
是最喜欢的)。(根据我的经验,列not found会产生一个不同的异常,因此不太可能由此产生)考虑到,实际上更可能是您正在定义一个新的本地列名(为value
),您试图使用它,但您的语句中没有包含它。如果您切换到源列,或者只切换到一个常量值,那么现有答案是否有效DISTINCT
是不必要的,因为如果你要走这条路线,你应该做一些不同的事情,要么把这三个都放到VALUES
语句中,要么使用伪表(sysibm.sysdummy1
)给你自己一行。如果您幸运的话,系统能够查看该查询并优化出不同的
,否则您就是在惩罚自己。
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