You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中实现基于同一数据集的多条件统计查询?

多条件图书统计的优化实现

不用拆分多个查询存变量,直接用单条SQL语句就能一次性返回三个统计结果,只需要扫描一次图书表,性能比多次查询高很多。

核心SQL示例(适用于多数关系型数据库)

SELECT
  COUNT(*) AS total_books,
  COUNT(CASE WHEN is_overdue = TRUE THEN 1 END) AS overdue_books,
  COUNT(CASE WHEN LOWER(author_last_name) LIKE 'a%' THEN 1 END) AS author_a_last_name_books
FROM library_books;

关键细节说明

  • COUNT(*) 直接统计全表总记录数,也就是图书总数。
  • CASE WHEN 配合COUNT实现条件统计:只有满足条件的行才会被计数(不满足时返回NULL,COUNT会忽略NULL)。
  • 用LOWER()把作者姓氏转成小写,避免因数据库大小写敏感导致漏统计(比如姓氏是Allen或allen的情况),如果你的数据库本身不区分大小写(比如MySQL默认设置),可以去掉LOWER()。

针对特定数据库的调整

  • PostgreSQL:可以用FILTER语法简化条件统计,更直观:
    SELECT
      COUNT(*) AS total_books,
      COUNT(*) FILTER (WHERE is_overdue = TRUE) AS overdue_books,
      COUNT(*) FILTER (WHERE author_last_name ILIKE 'a%') AS author_a_last_name_books
    FROM library_books;
    
    这里ILIKE是PostgreSQL的不区分大小写模糊匹配,替代LOWER()+LIKE。

这种方式的好处是:只需要和数据库建立一次连接、扫描一次表,减少了多次查询带来的网络开销和重复扫表的性能损耗,结果直接返回三个统计值,不用额外处理变量存储。

内容的提问来源于stack exchange,提问作者Ian Oh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:29:52