我有一张table
id || category || views
-------------------------------
1 | cat1 | 100
2 | cat2 | 2900 <==== most views in cat 2
3 | cat3 | 200
4 | cat1 | 1900 <==== most views in cat 1
5 | cat1 | 800
6 | cat2 | 800
7 | cat3 | 2700 <==== most views in cat 3
8 | cat2 | 900
9 | cat3 | 100
10 | cat1 | 100
11 | cat2 | 1200
12 | cat3 | 1500
13 | cat3 | 1100
14 | cat2 | 1700
15 | cat1 | 100
现在,如果单击“类别”选项卡来排列只是为了理解,它将在我的数据库中按如下方式排列表:
id || category || views
-------------------------------
1 | cat1 | 5100 <==== most views in cat 1
4 | cat1 | 1900
5 | cat1 | 800
10 | cat1 | 100
15 | cat1 | 100
5 | cat2 | 2000 <==== most views in cat 2
6 | cat2 | 800
8 | cat2 | 900
11 | cat2 | 1200
14 | cat2 | 1700
3 | cat3 | 200
7 | cat3 | 3000 <==== most views in cat 3
9 | cat3 | 100
12 | cat3 | 1500
13 | cat3 | 1100
现在,我希望sql代码首先检查cat1中具有max views的行,该行的id号为1,如上所示。现在,如果该行(即id号1)的id小于等于4,则不要在此处显示该类别的任何行我不希望sql代码在跳过id号1之后重新检查另一行的最大视图数,一旦id号小于等于4的最大行sql代码应跳过该类别,则该类别的任何行都不应显示在结果中。现在检查下一个类别和循环。
我现在想给出如下所需的输出:
id || category || views
-------------------------------
5 | cat2 | 2000 <==== most views in cat 2
14 | cat2 | 1700
11 | cat2 | 1200
8 | cat2 | 900
6 | cat2 | 800
7 | cat3 | 3000 <==== most views in cat 3
12 | cat3 | 1500
13 | cat3 | 1100
3 | cat3 | 200
9 | cat3 | 100
注意:cat1和cat2之间的差距只是为了区分类别和你的理解,我不想在我的输出差距。
现在,在检查了id大于4的max视图之后,输出应该按类别排序,因为在所需的输出中,每个类别中有超过1行,我希望它按视图进一步排序,如上所示。
现在我还想按max视图的顺序排列所需的输出表,如下所示:
id || category || views
-------------------------------
7 | cat3 | 3000 <==== most views in cat 3
12 | cat3 | 1500
13 | cat3 | 1100
3 | cat3 | 200
9 | cat3 | 100
5 | cat2 | 2000 <==== most views in cat 2
14 | cat2 | 1700
11 | cat2 | 1200
8 | cat2 | 900
6 | cat2 | 800
因为id 7的值小于id 5
提前谢谢。
我编辑的查询@radim baca:
select p0.*
from post p0
join post p1 on p0.category= p1.category
join
(
select p2.category, max(p2.views) as max_views
from post p2
group by p2.category
) p2 on p2.category= p1.category and
p2.max_views = p1.views and
p1.id > 4 order by p2.max_views desc, category desc , views desc
3条答案
按热度按时间wfypjpf41#
切科特:
在这里工作:http://sqlfiddle.com/#!18/e5f89型
uqcuzwp82#
找出每只猫的最大值。用这些信息建立一个临时表。
我们将使用数字而不是名称进行最终排序。
(我不明白关于
id>4
)slhcrj9b3#
如果你想从
post
表中具有最高views
每种价值category
有id
超过4则使用以下查询: