MySQL如何创建统计同A、B、C列值对应变体总数的视图
实现方案
MySQL 10.5.9 版本支持窗口函数,直接用分区统计的方式实现即可,不需要关联子查询,执行效率更高。
假设你原表的名称为origin_table,替换为实际表名后,用以下语句创建视图:
CREATE VIEW your_view_name AS SELECT A, B, C, D, COUNT(*) OVER (PARTITION BY A, B, C) AS variants FROM origin_table;
逻辑说明
- 用
PARTITION BY A,B,C将所有A、B、C三个字段取值完全相同的行划到同一个分区 COUNT(*) OVER ()统计每个分区内的总行数,这个值会赋值给同分区内的每一行的variants字段,完全符合忽略D字段差异、统计同ABC组行数的要求
如果有兼容更低版本MySQL的特殊需求,也可以用子查询关联的方式实现:
CREATE VIEW your_view_name AS SELECT t1.A, t1.B, t1.C, t1.D, t2.variants FROM origin_table t1 LEFT JOIN ( SELECT A,B,C,COUNT(*) AS variants FROM origin_table GROUP BY A,B,C ) t2 ON t1.A = t2.A AND t1.B = t2.B AND t1.C = t2.C;
验证方法
创建完成后可以执行以下语句查看结果是否符合预期:
SELECT * FROM your_view_name LIMIT 10;
可自行选取几组ABC取值相同的行,检查对应的variants值是否一致且等于该组的实际行数。
内容的提问来源于stack exchange,提问作者Jim Weisbin
相关产品推荐
相关产品推荐

