我的解决方案有问题,我找到了这个例子:
(SELECT COUNT(*) FROM person AS b
WHERE b.group = a.group AND b.age >= a.age) <= 2
ORDER BY a.group ASC, a.age DESC
(来自:Get top n records for each group of grouped results)
但是我需要在一个旧列的基础上创建一个新列,因此我需要进行一些计算,当我尝试添加更多列时,我收到一条错误消息。如果我只是添加满足感,就可以了,例如:
(SELECT COUNT(*) FROM person AS b
WHERE b.group = a.group AND b.age*100 >= a.age*100) <= 2
ORDER BY a.group ASC, a.age DESC
但是当我尝试重命名新列时,AS过多。
我也尝试使用UNION ALL,但是我的SQLite对()不满意。这根本不适合我:
(
select *
from mytable
where `group` = 1
order by age desc
LIMIT 2
)
UNION ALL
(
select *
from mytable
where `group` = 2
order by age desc
LIMIT 2
)
“结果:”(“附近:语法错误在第1行:(“
即使我在()之前执行SELECT和FROM,我也收到错误消息。
(where `group` = 1
order by age desc
LIMIT 2)
UNION ALL
select * from mytable
(where `group` = 2
order by age desc
LIMIT 2)
“ WHERE”附近:语法错误
请有人能解释一下为什么吗?
此语法应该起作用:
select *
from (
select *
from mytable
where `group` = 1
order by age desc
LIMIT 2
)
UNION ALL
select *
from (
select *
from mytable
where `group` = 2
order by age desc
LIMIT 2
);
但是您也可以使用ROW_NUMBER():
select t.`group`, t.age, ....<rest of the columns from mytable>
from (
select *, row_number() over (partition by `group` order by age desc) rn
from mytable
where `group` in (1, 2)
) t
where t.rn <= 2