在SQL中限制和按行分组

时间:2018-04-04 11:10:04

标签: mysql sql

我有一张包含物品的表格:

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个最喜欢的项目

3 个答案:

答案 0 :(得分:1)

实际上,在您提供的示例结果中,没有应用真正的GROUP BY。它只是按category_idlikes排序。为了得到预期的结果:

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