MySQL 5.0 如何通过WHERE子句查询符合price=25条件的每第3行数据
实现方案
支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等通用方案)
先过滤所有Price=25的记录,给符合条件的记录按id升序分配行号,再筛选行号为3的倍数的行即可:
SELECT id, Product, Price FROM ( SELECT id, Product, Price, ROW_NUMBER() OVER (ORDER BY id ASC) AS row_num FROM 你的表名 WHERE Price = 25 ) AS filtered_data WHERE row_num % 3 = 0;
逻辑说明:内层查询筛选出所有定价为25的商品,按id从小到大排序后生成连续行号,你示例中符合条件的记录行号依次为:id1=1、id2=2、id5=3、id7=4、id8=5、id10=6,外层筛选row_num模3等于0的行,就会返回id=5、id=10两条记录,完全匹配预期结果。
不支持窗口函数的旧版本MySQL方案
可以用用户自定义变量实现行号计数:
SELECT id, Product, Price FROM ( SELECT id, Product, Price, @row := @row + 1 AS row_num FROM 你的表名, (SELECT @row := 0) AS init_var WHERE Price = 25 ORDER BY id ASC ) AS filtered_data WHERE row_num MOD 3 = 0;
注意:一定要明确指定ORDER BY的排序规则,否则数据库返回的记录顺序不确定,会导致行号计算错误,如果你需要按其他维度排序,修改ORDER BY后的字段即可。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

