Mysql 按结果集对组进行排序

Mysql 按结果集对组进行排序,mysql,sql,ranking,Mysql,Sql,Ranking,我想有一个列显示排名最高的金额是这个结果集的1。这能做到吗? 以下是要生成的查询: 我有预感你真的用了MariaDB。 基于您在已删除答案中的评论 然后,您可以尝试在您的选择中添加一个超过总和的值 一个简单的例子: dbfiddle您使用的是哪种类型的SQL?Oracle/SQL Server/My SQL等。当我通过我的网络主机尝试它时,它是一个MySql服务器。我工作的电脑上写着MariaDB。不管是哪种方式,我已经尝试了我在这里看到的两种建议,我得到了以下结果:以前发现了一个别名。在181

我想有一个列显示排名最高的金额是这个结果集的1。这能做到吗? 以下是要生成的查询:


我有预感你真的用了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