当前位置: 首页 > wzjs >正文

做个淘宝客网站怎么做的天津网站建设渠道

做个淘宝客网站怎么做的,天津网站建设渠道,网页设计方案,即时灵感网站【SQL】COUNT... FILTER 的适用场景 一、引言二、FILTER 基础学习2.1 语法解析2.2 适用范围2.2.1 主流数据库支持情况 2.3 技术优势2.3.1 性能优化2.3.2 等阶写法对比 2.4 适用场景2.4.1 多维统计报表2.4.2 动态数据过滤2.4.3 复杂条件处理 三、总结 一、引言 今天参加业务评审…

【SQL】COUNT... FILTER 的适用场景

  • 一、引言
  • 二、FILTER 基础学习
    • 2.1 语法解析
    • 2.2 适用范围
      • 2.2.1 主流数据库支持情况
    • 2.3 技术优势
      • 2.3.1 性能优化
      • 2.3.2 等阶写法对比
    • 2.4 适用场景
      • 2.4.1 多维统计报表
      • 2.4.2 动态数据过滤
      • 2.4.3 复杂条件处理
  • 三、总结

一、引言

  • 今天参加业务评审,见到一个不太一样的SQL如下,在数据分析与数据库查询场景中,​条件计数常用 CASE WHEN 实现,但 COUNT(*) FILTER (WHERE …) 很少见,觉得比较新奇。
  • 由于日常大量使用的是Hive和Mysql偏多,随着业务场景变更,逐渐使用PostgreSQL多起来,便好奇的想了解这种写法,做个学习笔记。
  • 本文将探讨交流其核心原理、适用场景及技术优势,帮助开发者优化查询性能并提升代码可读性。
# 突然感觉不常见的一种写法
SELECT count(*) FILTER (where s_type='0'),"s"   FROM log_detail
WHERE ds = '20250414'   GROUP BY "s"

二、FILTER 基础学习

2.1 语法解析

COUNT(*) FILTER (WHERE <condition>) 
  • ​**COUNT(*)**​:统计所有行数(包括 NULL 值)。
  • ​**FILTER (WHERE )**​:动态过滤参与计数的记录,仅保留满足条件的行。
  • 示例如上面提到的业务案例;

2.2 适用范围

  • 主要适用于【遵循 SQL:2003 标准或支持扩展聚合函数语法的数据库系统】,具体支持的 SQL 类型及场景如下:

2.2.1 主流数据库支持情况

  • PostgreSQL 及兼容生态​、衍生系统如 ​Greenplum、Amazon Redshift​ 等也兼容该语法。
  • ​SparkSQL​ 会自动将 COUNT(DISTINCT) 转换为 FILTER 表达式以提高性能。
    • 例如,多列去重统计时,Spark 会通过 Expand 操作生成 gid 标记,再结合 FILTER 分条件聚合。
  • SQLite​:支持 FILTER 子句,常用于分组后按条件聚合。
  • 部分 OLAP 引擎​:ClickHouse、Doris​ 等列式存储数据库支持类似语法。

对于日常不使用上述数据库标准的同学,当个参考即可。

2.3 技术优势

2.3.1 性能优化

  • 减少计算冗余​:传统 CASE WHEN 需要遍历所有行并生成中间结果,而 FILTER 子句通过预过滤直接跳过无关数据内存和 CPU 消耗(实测性能提升可达 20%-30%)
  • 优化执行计划​:数据库引擎可针对过滤条件生成更优的索引扫描路径(如 Bitmap Index Scan)。

2.3.2 等阶写法对比

​使用 FILTER 的写法传统 CASE WHEN 写法
​COUNT(*) FILTER (WHERE s_type=‘0’)COUNT(CASE WHEN s_type=‘0’ THEN 1 END)
SUM(amount) FILTER (WHERE status=‘paid’)SUM(CASE WHEN status=‘paid’ THEN amount ELSE 0 END)

2.4 适用场景

2.4.1 多维统计报表

  • 单次查询生成多维度聚合指标,例如:
SELECT  product_category,COUNT(*) FILTER (WHERE region='North') AS north_orders,COUNT(*) FILTER (WHERE region='South') AS south_orders
FROM sales
GROUP BY product_category;

2.4.2 动态数据过滤

  • 结合时间窗口或动态参数实现灵活查询:
-- 统计近7天活跃用户中 VIP 占比
SELECT  COUNT(*) FILTER (WHERE is_vip = true) / COUNT(*)::FLOAT AS vip_ratio
FROM users
WHERE last_login >= CURRENT_DATE - INTERVAL '7 days'

2.4.3 复杂条件处理

  • 支持嵌套子查询和窗口函数,例如:
SELECT  user_id,COUNT(*) FILTER (WHERE s_type = '1' AND EXISTS (SELECT 1 FROM A WHERE ad_id = B.ad_id)) AS clicks
FROM B
GROUP BY user_id;

三、总结

COUNT(*) FILTER (WHERE …) 通过语法精简与执行优化,显著提升了条件统计的效率与可维护性。尤其在 PostgreSQL 和 Spark 生态中,是多维分析的推荐实践,对于需兼容传统数据库的场景,可通过 CASE WHEN 平稳过渡即可。

http://www.dtcms.com/wzjs/804854.html

相关文章:

  • 碧辉腾乐 网站建设手机网站开发软件
  • 慈溪建设公司网站怎样在百度上打广告
  • 做音乐网站代码php网站开发开发网站教程
  • 有没有做cad单的网站php很简单的商城源码
  • 上海网站设计制作公司少儿编程加盟费多少钱
  • 注册公司名称查询网站赤峰企业网站建设
  • 做网站数据库怎么建济南网站建设开发公司哪家好
  • 打开英文网站字体不对推广平台使用
  • 微信网站改版价格微信淘宝购物券网站是怎么做的
  • 厦门网站建设培训赣州网络公司电话
  • 江苏网站建设 seo的物app
  • 线上销售水果营销方案优化seo培训班
  • 我想做一个网站怎么办快速搭建网站2020
  • 开发网站的空间分录商业空间设计说明范文
  • 快递网站模板服装市场调网站建设的目的
  • 下载jsp网站开发用啥工具经典广告语
  • 专业做招聘的网站怎样做艾条艾柱网站
  • 学会计算机编程可以做网站吗打造一个网站需要多少钱
  • 易展 网站建设网络规划设计师证书图片
  • 网站音频播放器代码房屋装修app
  • 重庆市工程建设标准化网站揭阳门户网站开发
  • 公众号授权网站外包和劳务派遣哪个更好
  • 织梦网站导航固定做网站赚钱缴税吗
  • 广东湛江怎么做网站教程邢台168交友最新信息
  • 门户网站建设工作总结大连响应式网站建设
  • 哈尔滨大型网站开发seo网站描述之间用什么标点符号
  • 青岛网站设计模板Wordpress需要费用吗
  • 做网站还要写文章吗合肥响应式网站建设方案
  • 网站界面怎么做手机网站开发位置定位
  • 站长之家是干嘛的用微魔方做的网站一定要加