我有一个数据库表,数据如下所示。我想从以下条件中选择此表中的数据。
选择product_id
为1的所有记录。然后获取每个group_id
的两条记录,其中manual
1被选中manual
0。然后按{{1}排序} DESC。
这应该给我以下结果:
score
这只能在一个(简单)查询中实现吗?
CREATE和INSERT语句;
id | product_id | group_id | manual | score
-------------------------------------------
6 | 1 | 4 | 1 | 400
1 | 1 | 7 | 0 | 1000
2 | 1 | 7 | 0 | 900
5 | 1 | 4 | 0 | 600
答案 0 :(得分:1)
请勿拨打电话table
。这很烦人。无论如何...
SELECT id
, product_id
, group_id
, manual
, score
FROM
( SELECT x.*
, CASE WHEN @prev = group_id THEN @i := @i+1 ELSE @i := 1 END i
, @prev := group_id
FROM `table` x
, (SELECT @prev:=null,@i:=0) vars
ORDER
BY group_id DESC
, manual <> 1
, score DESC
) n
WHERE i <= 2
ORDER
BY group_id DESC
, manual <> 1
, score DESC;