Mysql 按结果集对组进行排序
我想有一个列显示排名最高的金额是这个结果集的1。这能做到吗? 以下是要生成的查询:Mysql 按结果集对组进行排序,mysql,sql,ranking,Mysql,Sql,Ranking,我想有一个列显示排名最高的金额是这个结果集的1。这能做到吗? 以下是要生成的查询: 我有预感你真的用了MariaDB。 基于您在已删除答案中的评论 然后,您可以尝试在您的选择中添加一个超过总和的值 一个简单的例子: dbfiddle您使用的是哪种类型的SQL?Oracle/SQL Server/My SQL等。当我通过我的网络主机尝试它时,它是一个MySql服务器。我工作的电脑上写着MariaDB。不管是哪种方式,我已经尝试了我在这里看到的两种建议,我得到了以下结果:以前发现了一个别名。在181
我有预感你真的用了MariaDB。 基于您在已删除答案中的评论 然后,您可以尝试在您的选择中添加一个超过总和的值 一个简单的例子:
dbfiddle您使用的是哪种类型的SQL?Oracle/SQL Server/My SQL等。当我通过我的网络主机尝试它时,它是一个MySql服务器。我工作的电脑上写着MariaDB。不管是哪种方式,我已经尝试了我在这里看到的两种建议,我得到了以下结果:以前发现了一个别名。在181号位置的秩附近,需要一个别名。在180号位置附近。靠近排名181 1064位-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用第5行“order by SUMevents\u full.amount desc as rank FROM user\u names JOIN events\u”的正确语法。所以它可能是一个保留字。如果您引用它,或者使用degreeofawesome这样的名称会怎么样?如果它是MySql 5.7,那么它还不知道这些函数。运气不好。无论如何谢谢你!分析中发现3个错误。先前已找到别名。在181号位置,接近degreeofawesome,预计会有一个别名。在180号位置附近。接近degreeofawesome位置181 SQL查询:文档MySQL说:文档1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解可在第5行“order by SUMevents\u full.amount desc as degreeofawesome FROM user\u names”附近使用的正确语法是否可以运行select@@version。我注意到MySql 8.0在名称排名上确实存在问题。Test*@Kevin第二个示例是否运行?
SELECT user_names.user_name,city.city,state.state,SUM(events_full.amount) AS total
FROM user_names,city,state,events_full
WHERE user_names.user_id=events_full.user_id
AND city.city_id=events_full.city_id
AND state.state_id=events_full.state_id
AND events_full.season_id=13
AND amount > 0
Group By user_names.user_name
DENSE_RANK() OVER (ORDER BY SUM(events_full.amount) DESC) AS Ranking
create table test
(
col1 int,
col2 int
);
insert into test values
(1,1),(1,2),(1,3),
(2,1),(2,2),(2,3),(2,4),
(3,1),(3,5),
(4,1),(4,2);
select col1
, sum(col2) tot
, dense_rank() over (order by sum(col2) desc) rnk
from test
group by col1
order by rnk
col1 | tot | rnk
---: | --: | --:
2 | 10 | 1
1 | 6 | 2
3 | 6 | 2
4 | 3 | 3
select *
from
(
select col1, total
, case
when total = @prev_tot
and @prev_tot := total
then @rnk
when @prev_tot := total
then @rnk := @rnk + 1
end as rnk
from
(
select col1
, sum(col2) as total
from test
group by col1
order by total desc
) q1
cross join (select @rnk:=0, @prev_tot:=0) v
) q2
order by rnk;
col1 | total | rnk
---: | ----: | :--
2 | 10 | 1
1 | 6 | 2
3 | 6 | 2
4 | 3 | 3