首页 > 数据库 > mysql教程 > 如何使用 PostgreSQL 最佳地统计分组数据中的出现次数?

如何使用 PostgreSQL 最佳地统计分组数据中的出现次数?

Mary-Kate Olsen
发布: 2025-01-24 06:14:16
原创
612 人浏览过

How to Optimally Count Occurrences in Grouped Data Using PostgreSQL?

高效统计PostgreSQL分组数据中的出现次数

PostgreSQL提供了多种方法来统计分组表中数据的出现次数。例如,可以使用CASE WHEN语句来统计特定值:

<code class="language-sql">SELECT
    sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO,
    sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE,
    sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO,
    category
FROM reviews
    GROUP BY category</code>
登录后复制

然而,当可能的值数量增加时,使用CASE WHEN语句会变得越来越繁琐。在PostgreSQL 9.4及更高版本中,聚合FILTER选项提供了一种更简洁、可能更快的解决方案:

<code class="language-sql">SELECT category
     , count(*) FILTER (WHERE question1 = 0) AS zero
     , count(*) FILTER (WHERE question1 = 1) AS one
     , count(*) FILTER (WHERE question1 = 2) AS two
FROM   reviews
GROUP  BY 1;</code>
登录后复制

为了简洁起见,可以使用简化的语法:

<code class="language-sql">SELECT category
     , count(question1 = 0 OR NULL) AS zero
     , count(question1 = 1 OR NULL) AS one
     , count(question1 = 2 OR NULL) AS two
FROM   reviews
GROUP  BY 1;</code>
登录后复制

对于大型选项列表,crosstab()函数提供了一种性能更优的替代方案:

<code class="language-sql">SELECT * FROM crosstab(
     'SELECT category, question1, count(*) AS ct
      FROM   reviews
      GROUP  BY 1, 2
      ORDER  BY 1, 2'
   , 'VALUES (0), (1), (2)'
   ) AS ct (category text, zero int, one int, two int);</code>
登录后复制

总而言之,PostgreSQL提供了多种方法进行条件SQL计数。FILTER选项提供了一种简洁高效的解决方案,而crosstab()函数则为处理大量的选项提供了最佳性能。

以上是如何使用 PostgreSQL 最佳地统计分组数据中的出现次数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板