如何仅用MySQL查询语句获取表前5行中itemvalue为a的记录?
问题描述
现有表X的示例数据如下:
+--------+------------+ | itemID | itemvalue | +--------+------------+ | 1 | a | | 2 | b | | 3 | a | | 4 | a | | 5 | b | | 6 | a | | 7 | b | | 8 | a | | 9 | a | | 10 | b | +--------+------------+
需要筛选出仅前5行(按itemID升序排序的前5条)中itemvalue等于'a'的记录,预期返回itemID为1、3、4的三行数据,是否可以仅通过一条MySQL查询语句实现,无需额外计算处理?
解答
可以直接用一条MySQL语句实现,写法如下:
SELECT * FROM ( SELECT * FROM X ORDER BY itemID ASC LIMIT 5 ) AS top5 WHERE itemvalue = 'a';
注意必须显式指定ORDER BY itemID ASC,SQL表本身没有默认的行顺序,不加排序规则的话LIMIT 5返回的结果是不确定的,无法保证是你预期的itemID 1到5的前5行。
内层子查询先拿到按itemID排序后的前5行数据,外层再对这部分数据过滤itemvalue为a的记录,运行后会直接返回符合要求的三条结果,不需要额外做计算处理。
内容的提问来源于stack exchange,提问作者Nevermind2001
相关产品推荐
相关产品推荐

