6

我有下表。

group _id   p_id    version value
1              1       1    10
1              1       2    11
1              1       2    12
1              2       3    13
2              1       2    14
2              1       3    15
2              1       2    16

我想计算每个 group_id 有多少条记录,以及每个 group_id 有多少不同的 p_id + 版本。我有以下查询

SELECT "group_id",count(*) , count(distinct "p_id","version")
FROM tbl
group by "group_id"

显然,它不起作用,因为 Oracle 会给我 COUNT 错误

ORA-00909: invalid number of arguments 

我知道这可以通过子查询来完成。但是,有什么简单的方法可以获得相同的结果吗?考虑到性能对我来说很重要,因为表中有超过 5 亿条记录。

SQL小提琴

4

1 回答 1

9

我不知道这是否是最好的方法,但我通常连接这两个值,使用分隔符来强制执行“区别性”,因此它们成为一个表达式,Oracle 可以处理COUNT DISTINCT

SELECT "group_id",count(*) , count(distinct "p_id" || '-' || "version")
FROM tbl
group by "group_id"
于 2013-06-28T20:01:53.827 回答