与“聚合函数”相关的TAG标签
ISNULL和ISNOTNULL是MySQL中判断NULL的唯一正确方式,因为NULL表示缺失或未知状态,不能用=、!=等比较操作符;空字符串‘’、数值0与NULL本质不同,需分别处理。
视图查询慢的本质是底层SELECT未优化,因视图仅保存SQL语句而不存数据,无法建索引,需通过EXPLAIN分析执行计划、避免SELECT*、扁平化定义、确保JOIN字段有索引并防止函数导致索引失效。
MySQL中GROUPBY要求SELECT非聚合字段必须出现在GROUPBY中;聚合函数需语义合理;WHERE过滤分组前数据,HAVING过滤分组后结果;多字段分组时NULL被视为相同值;结果需显式ORDERBY保证顺序。
基础分群用GROUPBY+聚合函数,需确保SELECT中非聚合字段全在GROUPBY中;动态分位用NTILE或PERCENT_RANK;复杂逻辑宜用CTE分步处理;避免COUNT(DISTINCT)性能瓶颈。
PostgreSQL用percentile_cont可直接计算中位数和任意百分位,需配合WITHINGROUP(ORDERBY...),自动插值且忽略NULL;MySQL8.0+需窗口函数模拟,SQLServer必须作为窗口函数使用,旧版数据库需退化方案。
索引将全表扫描的O(n)查询降为O(logn),通过B+树减少磁盘IO、支持有序范围查询、避免回表;显著加速WHERE、JOIN、GROUPBY、ORDERBY及聚合操作,但过多索引会降低写性能、增加空间与维护成本。
SQL表达式严格按操作符优先级求值,非简单左到右;NULL参与运算结果为NULL,遵循三值逻辑;隐式转换不可控且跨库差异大;函数执行时机受优化器影响;类型、NULL、优化器与事务共同决定表达式行为。
本文详解如何在MySQL中使用GROUPBY对多个字段(如年份、科目ID)分组,并配合SUM()正确汇总成绩;同时提供PDO安全写法及常见错误排查,避免因JOIN导致的重复计数问题。
CASEWHEN的核心价值是行级条件驱动的字段生成或值映射,需写ELSE防NULL失真,条件顺序影响结果,适用于GROUPBY条件聚合、窗口函数标签标记等场景,避免在JOIN和WHERE中滥用。
PostgreSQL用percentile_cont做线性插值求连续分位数,须配合WITHINGROUP(ORDERBY...)使用;MySQL8.0+用PERCENT_RANK()窗口函数逼近;SQLServer2012+支持同名函数,NTILE仅分组不返回分位值;通用方案可用ROW_NUMBER...
