首页 > 数据库 > mysql教程 > 如何高效统计SQL中多条件数据出现的次数?

如何高效统计SQL中多条件数据出现的次数?

Susan Sarandon
发布: 2025-01-24 06:27:11
原创
744 人浏览过

How Can I Efficiently Count Data Occurrences in SQL with Multiple Conditions?

高效的SQL条件计数方法

在SQL中,根据特定列对数据出现次数进行分组计数,有多种方法。在PostgreSQL中,最直接的方法是使用CASE表达式,如示例查询所示。然而,当处理大量可能值时,这种方法会变得繁琐。

PostgreSQL 9.4及更高版本提供了一种更优化、更灵活的方法:FILTER聚合选项。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>
登录后复制

此查询有效地计算了question1列中零、一和二的出现次数,并按category列分组。

为了进一步优化,可以使用以下简短版本:

<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>
登录后复制

crosstab查询生成一个结果集,其中包含所有所需的计数,并以命名列的形式呈现,便于访问和分析。

以上是如何高效统计SQL中多条件数据出现的次数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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