【问题标题】:Is there a way to count a number of distinct values? [duplicate]有没有办法计算许多不同的值? [复制]
【发布时间】:2015-09-06 09:22:23
【问题描述】:

在 PostgreSQL 9.4 中,我有一个表:

id         p_id
PK        integer
-----------------
1           1
2           1
.............
123122       2233

有没有办法只用一个查询(不使用子查询)计算表中所有不同的p_id 值。我可以随意使用任何窗口功能。

【问题讨论】:

    标签: sql postgresql select distinct-values


    【解决方案1】:

    您可以在count 函数中使用distinct 修饰符:

    SELECT COUNT(DISTINCT p_id) FROM mytable
    

    【讨论】:

    • 有趣,为什么没有人对帖子投反对票?这是一个坏方法吗?
    • Postgres 和 Hive 是两个数据库,其中 count() 和使用 distinct 的子查询通常比 count(distinct) 快。我真诚地怀疑匿名投票者是否正在考虑执行计划的这个细节。这是正确的答案。而且,count(distinct) 产生次优执行计划的情况是 Postgres 开发人员在未来进一步改进数据库的机会。
    • @GordonLinoff 我承认我不知道 Postgres,谢谢!今天学了点儿新东西!我将不得不使用我的本地数据库来看看如何重现它。
    • @Mureinik 。 . .您可以看到多处理器服务器上的行为。关键思想是group by 的“聚合”部分并行运行,但评估聚合函数的“函数”部分是序列化的。这会对性能产生很大影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多