sql查询以对具有相同值的两列进行计数

sql查询以对具有相同值的两列进行计数,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我有一个包含两列关键字的表,我需要计算它们的出现次数。 我可以单独做,一次一列,然后加上总数,定期计数 select count (id), kw1 from mytable group by kw1 kw2也是一样,但我需要直接从数据库获取信息 因此,该表类似于: id kw1 kw2 1 a b 2 c d 3 b 4 e

我有一个包含两列关键字的表,我需要计算它们的出现次数。 我可以单独做,一次一列,然后加上总数,定期计数

select count (id), kw1 from mytable group by kw1
kw2也是一样,但我需要直接从数据库获取信息

因此,该表类似于:

id       kw1          kw2
1         a            b
2         c            d 
3         b             
4         e            a
'a'  2
'b'  2
'c'  1
'd'  1
'e'  1
因此,我们的想法是获得每个关键字使用了多少次,因此结果应该是:

id       kw1          kw2
1         a            b
2         c            d 
3         b             
4         e            a
'a'  2
'b'  2
'c'  1
'd'  1
'e'  1
提前谢谢

PS:对不起,我忘了,不过以防万一,我正在使用Oracle 10g

试试这个:

SELECT kw, COUNT(kw)
FROM
(
   SELECT "kw1" AS kw FROM table1
   UNION ALL 
   SELECT "kw2"       FROM table1
) t
WHERE kw IS NOT NULL
GROUP BY kw
ORDER BY KW;
这将为您提供:

KW   COUNT(KW)
a       2
b       2
c       1
d       1
e       1

使用
union All
将两列数据合并为一列,然后计算发生次数

 SELECT cnt, COUNT(cnt)
    FROM
    (
       SELECT kw1 AS cnt FROM table
       UNION ALL 
       SELECT kw2       FROM table
    ) t
 WHERE cnt IS NOT NULL
GROUP BY cnt
ORDER BY cnt;

应该是这样的

SELECT kw,SUM(kw)
FROM(
(SELECT kw1 AS kw, COUNT(kw1) 
FROM table
WHERE kw1 IS NOT NULL GROUP BY kw1) skw1

UNION ALL

(SELECT kw2, COUNT(kw2) 
FROM table
WHERE kw2 IS NOT NULL GROUP BY kw2) skw2
)
GROUP BY kw
ORDER BY kw

前面的答案在执行并集后不执行求和运算

谢谢,它起作用了,但我有一些不同,我认为它与其他字段有关,来自我需要筛选的其他表。。。。完成了。再次感谢!!此查询无法工作,因为表别名skw1/skw2(此处不允许)出现语法错误,并且无法对字符串求和(要么必须使用COUNT,要么应该在内部查询中对COUNT列进行别名,然后对该列求和)。@FrankSchmitt你完全正确。事实上,求和应该在子查询的第二列上执行。还有一个关于别名的错误。我在工作,所以在发布回复的时候我没能尝试一下。谢谢你的评论!