根据多个订单条件为每个组选择第一行

时间:2019-12-26 22:02:05

标签: mysql sql greatest-n-per-group

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

我有一张这样的桌子:

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"

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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
)