sql查询计算具有相同值的两列

时间:2012-12-03 11:50:58

标签: sql oracle oracle10g

我有一个包含2列关键字的表格,我需要计算它们的出现次数。 我可以单独执行此操作,当时只有一列,并在以后添加总计,并使用常规计数

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

提前致谢

PS:对不起,我忘了,但为了以防万一,我正在研究Oracle 10g

3 个答案:

答案 0 :(得分:3)

试试这个:

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;

SQL Fiddle Demo

这会给你:

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

答案 1 :(得分:2)

看起来像这样。

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

执行UNION后,前一个答案不执行SUM操作。

答案 2 :(得分:0)

使用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;