我有一张包含物品的表格:
id title body category_id likes
1 title1 body1 17 57
2 title2 body2 14 35
3 title3 body3 11 16
4 title4 body4 11 96
5 title5 body5 14 78
6 title6 body6 11 64
我希望按照category_id对此表进行分组,并按喜欢订购:
id title body category_id likes
1 title1 body1 17 57
5 title5 body5 14 78
2 title2 body2 14 35
4 title4 body4 11 96
6 title6 body6 11 64
3 title3 body3 11 16
我想我必须做一个子查询但是怎么做?
编辑:我使用MySQL DB
编辑2:我忘了提到我想将结果限制为每个category_id 3行,因为我希望每个类别显示3个最喜欢的项目
答案 0 :(得分:1)
实际上,在您提供的示例结果中,没有应用真正的GROUP BY
。它只是按category_id
和likes
排序。为了得到预期的结果:
SELECT * FROM your_table
ORDER BY category_id DESC, likes DESC
答案 1 :(得分:0)
我将这个问题解释为:我想按每个类别的总喜欢来排序。
您可以在order by
子句中使用子查询,因此一种方法是:
select t.*
from t
order by (select sum(t2.likes) from t t2 where t2.category_id = t.category_id),
category_id;
您也可以使用窗口功能执行此操作:
select t.*
from t
order by sum(t.likes) over (partition by t.category_id),
category_id;
答案 2 :(得分:0)
对不起 - 在MySQL中似乎不可能 - Postgres会起作用。 有限制: 1.使用关键字IN时,子查询中不允许使用限制 2.没有引用子查询中的父父列
以下答案不起作用。
SELECT *
FROM your_table t1
WHERE t1.id IN (SELECT id
FROM your_table t2
WHERE t1.category_id=t2.category_id
ORDER BY likes DESC
LIMIT 3)
ORDER BY category_id DESC, likes DESC