【发布时间】:2021-10-27 02:51:09
【问题描述】:
MySQL V 8.0
我需要获取用户的分页列表以及他们的排名,但应该始终添加特定的用户记录(例如结果应该始终有一个名为“Alex”的用户记录)。尽管我已经合并了查询并达到了预期的结果,但正在考虑通过两次执行相同的查询来增加数据库的开销。 需要任何改进建议。
create table userData (recordDate date ,userName varchar(10), score FLOAT);
insert into userData (recordDate, userName, score)
values
('2020/8/1','Chris', 78),
('2021/8/2','Aamir', 77),
('2021/8/3','Alex', 76),
('2021/8/1','Ali', 78);
我的解决方案
select * from (
(select userName, score,
ROW_NUMBER() over (
order by score desc
)scores_rank
from userData
limit 2)
union
(
select * from (
select
userName, score,
ROW_NUMBER() over (
order by score desc
)scores_rank
from userData
) as singleUser
where userName="Alex")
) as main;
想要的输出是
| userName | score | scores_rank |
| -------- | ----- | ----------- |
| Chris | 78 | 1 |
| Ali | 78 | 2 |
| Alex | 76 | 4 |
【问题讨论】:
标签: sql select union row-number mysql-8.0