我需要有关生成Oracle SQL查询的帮助......
问题是我有下表:
SELECT COL1, COL2, COL3, COUNT(DISTINCT COL1) DIFF_COUNT FROM TABLE1....
COL1 COL2 COL3 DIFF_COUNT
----------------------------
1 A XXXX 3
1 B LLLL 3
1 F TTTT 3
5 B GGGG 3
5 C VVVV 3
7 D FFFF 3
7 E AAAA 3
7 S SSSS 3
问题是我需要一个查询来显示所有列以及一个额外的列来显示不同COL1值的计数。
在示例中,我们为COL1(1,5和7)提供了3个不同的值
因此查询应在额外列中显示3。类似的东西:
{{1}}
我已经尝试了很多方法,我知道它可能就像COUNT一样简单,但是由于需要在结果中保留COL2和COL3,所以我无法实现它。
有任何帮助吗?
提前多多感谢!!
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以使用 COUNT()OVER()分析函数以及 DISTINCT 。
例如,
SQL> SELECT t1.*,
2 COUNT(distinct col1) OVER() DIFF_COUNT
3 FROM t1;
COL1 C COL3 DIFF_COUNT
---------- - ---- ----------
1 A XXXX 3
1 B LLLL 3
1 F TTTT 3
5 B GGGG 3
5 C VVVV 3
7 D FFFF 3
7 E AAAA 3
7 S SSSS 3
8 rows selected.
SQL>
或者,不使用分析函数,您可以使用子查询作为 INLINE VIEW :
SQL> SELECT t1.*,
2 (SELECT COUNT (*) FROM
3 (SELECT DISTINCT col1 FROM t1
4 )
5 ) AS DIFF_COUNT
6 FROM t1;
COL1 C COL3 DIFF_COUNT
---------- - ---- ----------
1 A XXXX 3
1 B LLLL 3
1 F TTTT 3
5 B GGGG 3
5 C VVVV 3
7 D FFFF 3
7 E AAAA 3
7 S SSSS 3
8 rows selected.
SQL>
答案 2 :(得分:0)
根据查询的其余部分应该做什么,您可以使用子查询?
SELECT COL1, COL2, COL3, (SELECT DISTINCT count(COL1) FROM TABLE1) AS DIFF_COUNT FROM TABLE1....
您甚至可以使用子查询以每行的方式生成不同的结果
答案 3 :(得分:0)
SELECT
col1,
col2,
col3,
count(col1) OVER(PARTITION BY col1 ORDER BY col1) DIFF_COUNT
FROM table_tmp;
COL1 COL2 COL3 DIFF_COUNT
---------- ----- ---- ----------
1 A XXXX 3
1 B LLLL 3
1 F TTTT 3
5 B GGGG 2
5 C VVVV 2
7 D FFFF 3
7 E AAAA 3
7 S SSSS 3
答案 4 :(得分:0)
这可能是一个糟糕的解决方案,但看到你还没有得到答案,我正在搞乱并得到了一些你想要的东西我会把它放在这里:
SELECT t1.*,
(SELECT count (*)
FROM (SELECT DISTINCT col1
FROM t1)
) AS DIFF_COUNT
FROM t1
可能有更好的解决方案,但这是我能想到的唯一解决方案 SQLFIDDLE如果要查看它:http://sqlfiddle.com/#!4/32578/36