建筑物查询:非重复计数
Building query: Distinct count
我需要有关生成 Oracle SQL 查询的帮助...
问题是我有以下 table:
COL1 COL2 COL3
----------------
1 A XXXX
1 B LLLL
1 F TTTT
5 B GGGG
5 C VVVV
7 D FFFF
7 E AAAA
7 S SSSS
问题是我需要一个查询来显示所有列以及一个额外的列来显示不同 COL1 值的计数。
在示例中,COL1 有 3 个不同的值(1、5 和 7)
所以查询应该在额外的列中显示 3。类似于:
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
我尝试了很多方法,我知道它可能就像一个 COUNT 和相应的分组依据一样简单,但由于必须在结果中保留 COL2 和 COL3,我无法实现它。
有什么帮助吗?
提前致谢!!
根据查询的其余部分应该做什么,您可以使用子查询吗?
SELECT COL1, COL2, COL3, (SELECT DISTINCT count(COL1) FROM TABLE1) AS DIFF_COUNT FROM TABLE1....
您甚至可以使用子查询以这种方式每行生成不同的结果
您可以使用 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>
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
这可能是一个糟糕的解决方案,但鉴于您还没有得到答案,我正在四处乱逛,得到了一些您想要的东西,无论如何我都会把它放在这里:
SELECT t1.*,
(SELECT count (*)
FROM (SELECT DISTINCT col1
FROM t1)
) AS DIFF_COUNT
FROM t1
可能有更好的解决方案,但这是我唯一能想到的
SQLFIDDLE 如果你想检查它:http://sqlfiddle.com/#!4/32578/36
最简单的方法是:
select col1, col2, col3, count(distinct col1) over() cnt from test
我需要有关生成 Oracle SQL 查询的帮助...
问题是我有以下 table:
COL1 COL2 COL3
----------------
1 A XXXX
1 B LLLL
1 F TTTT
5 B GGGG
5 C VVVV
7 D FFFF
7 E AAAA
7 S SSSS
问题是我需要一个查询来显示所有列以及一个额外的列来显示不同 COL1 值的计数。
在示例中,COL1 有 3 个不同的值(1、5 和 7)
所以查询应该在额外的列中显示 3。类似于:
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
我尝试了很多方法,我知道它可能就像一个 COUNT 和相应的分组依据一样简单,但由于必须在结果中保留 COL2 和 COL3,我无法实现它。
有什么帮助吗?
提前致谢!!
根据查询的其余部分应该做什么,您可以使用子查询吗?
SELECT COL1, COL2, COL3, (SELECT DISTINCT count(COL1) FROM TABLE1) AS DIFF_COUNT FROM TABLE1....
您甚至可以使用子查询以这种方式每行生成不同的结果
您可以使用 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>
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
这可能是一个糟糕的解决方案,但鉴于您还没有得到答案,我正在四处乱逛,得到了一些您想要的东西,无论如何我都会把它放在这里:
SELECT t1.*,
(SELECT count (*)
FROM (SELECT DISTINCT col1
FROM t1)
) AS DIFF_COUNT
FROM t1
可能有更好的解决方案,但这是我唯一能想到的 SQLFIDDLE 如果你想检查它:http://sqlfiddle.com/#!4/32578/36
最简单的方法是:
select col1, col2, col3, count(distinct col1) over() cnt from test