我目前使用的是MySQL8.0.12。目前有一张表里有300多万的数据,然后我的查询需求是这样的,查询某个省份的数据,然后使用MySQL8.0提供的窗口函数对查询出来的数据通过某个字段分组。
发现的具体问题如下:
下面我是用一个简单的SQL查询,主要想证明目前的条件总共查询出来的数据只有26条
SELECT
p.*
FROM colg_adn_school_admission_plan p
WHERE p.school_code IN ('10005') AND p.province_id = 12 AND p.candidate_type = 0 AND p.batch_type = 4
结果如下
因为我的需求是先过滤出满足要求的数据,然后再使用窗口函数分组,因此使用MySQL8.0新特性,具体SQL语句如下:
WITH FilteredData AS (
SELECT
p.*
FROM colg_adn_school_admission_plan p
WHERE p.school_code IN ('10005') AND p.province_id = 12 AND p.candidate_type = 0 AND p.batch_type = 4
)
SELECT
*
,ROW_NUMBER() OVER (PARTITION BY fd.major_inner_code ORDER BY fd.particular_year DESC) AS rn
FROM FilteredData fd;
奇怪的问题出现了,查询结果居然把表里300多万的数据全部查出来的??????????????
没有复现。
数据和建表语句来自 ChatGPT 创建。(另外,我本地的 8.0.30 版本也没有复现。)
查询语句,只是包成了一个 count 查询。