根据多个顺序标准为每个组选择第一行[重复]

问题描述 投票:1回答:1

免责声明:我已经搜索了类似的问题,但没有找到明确的答案。

我有一张这样的桌子:

id | catid | views | text
1    100      2000   "sometext"
2    200      2000   "sometext"
3    200      3000   "longertext"

对于每个catid(在这种情况下仅为2:100和200),我需要获得具有最多视图和更长文本的记录...在这种情况下,结果将是:

id | catid | views | text
1    100      2000   "sometext"
3    200      3000   "longertext"

[优先考虑观看次数。我已经尝试了一些使用内部联接的查询,但是似乎都不清楚并且无法正常工作...

有什么想法吗?

mysql sql greatest-n-per-group
1个回答
1
投票

一种方法使用具有order bylimit的相关子查询进行过滤。假设id是主键或唯一键:

select t.*
from mytable t
where t.id = (
    select id 
    from mytable t1
    where t1.catid = t.catid
    order by t1.views desc, char_length(t1.text) desc
    limit 1
)
© www.soinside.com 2019 - 2024. All rights reserved.