MySQL版本5.7
表:名称,categoryID。
是否可以从每个categoryID中只选择指定数量的行?
就像这样:
从table1中选择*
伪:极限10,其中categoryID =5,极限50,其中categoryID =8
发布于 2020-09-25 14:09:26
如果使用的是不支持窗口函数的MySql版本,则可以在WHERE子句中使用关联子查询:
SELECT t.* FROM tablename t
WHERE t.categoryID IN (5, 8)
AND (SELECT COUNT(*) FROM tablename WHERE categoryID = t.categoryID AND name < t.name) <
CASE t.categoryID
WHEN 5 THEN 10
WHEN 8 THEN 50
END如果您想要所有categoryID的结果,那么可以从WHERE子句中删除条件t.categoryID IN (5, 8),并在CASE表达式中列出所有的categoryIDs:
SELECT t.* FROM tablename t
WHERE (SELECT COUNT(*) FROM tablename WHERE categoryID = t.categoryID AND name < t.name) <
CASE t.categoryID
WHEN 5 THEN 10
WHEN 8 THEN 50
WHEN .....
END请参阅简化的演示。
注意,我假设列name是表中的主键或唯一键。
如果不是这样,那么您应该在上面的查询中使用表的主键,而不是name。
发布于 2020-09-25 14:01:46
使用row_number()
select t.*
from (select t.*,
row_number() over (partition by categoryid order by categoryid) as seqnum
from t
) t
where seqnum <= 5;https://stackoverflow.com/questions/64065601
复制相似问题