草庐IT

mysql - SQL Sum 每个团队的前 5 行

coder 2023-10-20 原文

我在下面这个 SQL 问题上得到了帮助,总结了每个团队的前 5 名长度。现在对我来说,问题似乎是 SQL 随机选择数据库中的 5 行,例如 7 行,用于 25 队,而不是前 5 行。有人对我有什么想法吗?将不胜感激!

select team, sum(length) as totalScore 
from 
(
    SELECT
        t.*,
        @num_in_group:=case when @team!=team then @num_in_group:=0 else @num_in_group:=@num_in_group+1 end as num_in_group,
        @team:=team as t
    FROM reg_catches t, (select @team:=-1, @num_in_group:=0) init
    ORDER BY team asc
) sub
WHERE
    sub.num_in_group <= 4 and
    competition = 16    and
    team = 25 
GROUP BY team
ORDER BY totalScore DESC;

表格

team length competition
----------------------
26   70       16
25   70       16
25   95       16
25   98       16
25   100      16
25   100      16
25   100      16
25   122      16

想要的输出:

team totalScore
---- -----------
25  520
26  70

最好的问候, 基督徒

最佳答案

如果您想获得每个团队 的前 5 行,您可以使用一个参数对每个团队的结果进行排名:

SELECT *, 
(@rank := if(@team = team, @rank + 1, if(@team := team, 1, 1))) as rank 
FROM (SELECT * from reg_catches order by team, length desc) ordered
HAVING rank <= 5
ORDER BY team, rank asc

这将产生以下内容:http://sqlfiddle.com/#!9/6042ae/1

| team | length | competition | rank |
+------+--------+-------------+------+
|  25  |   99   |     16      |   1  |
|  25  |   98   |     16      |   2  |
|  25  |   77   |     16      |   3  |
|  25  |   76   |     16      |   4  |
|  25  |   73   |     16      |   5  |
|  26  |   96   |     16      |   1  |
|  26  |   88   |     16      |   2  |
|  26  |   87   |     16      |   3  |
|  26  |   83   |     16      |   4  |
|  26  |   79   |     16      |   5  |

然后,如果需要,您可以将该查询包装在一个简单的聚合/组中,以获得每个团队的前 5 名的总数

SELECT team, sum(length) as 'total score' FROM
(SELECT *, 
(@rank := if(@team = team, @rank + 1, if(@team := team, 1, 1))) as rank 
FROM (SELECT * from reg_catches order by team, length desc) ordered
HAVING rank <= 5
ORDER BY team, rank asc) top5
GROUP BY team

根据 http://sqlfiddle.com/#!9/6042ae/2

| team  |total score|
+-------+-----------+
|  25   |   423     |
|  26   |   433     |
|  27   |   426     |

通常的注意事项将适用于参数,但没有它们您无法在 MySQL 中真正“排名”。我还发现这对于在应用参数之前以正确的顺序最初获得分数非常敏感。

虽然这可能不是最完善的解决方案,但我希望它能有所帮助

关于mysql - SQL Sum 每个团队的前 5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46618929/

有关mysql - SQL Sum 每个团队的前 5 行的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. ruby - 将n维数组的每个元素乘以Ruby中的数字 - 2

    在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c

  3. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  4. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  5. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  6. ruby - `gem install` 多个 gem 的语法是什么,为每个 gem 指定版本? - 2

    如何使用geminstall同时安装多个gem,同时指定我想要的版本?例子:geminstallakami-v1.2.0--ignore-dependenciesgeminstallatomic-v1.1.14--ignore-dependenciesgeminstallaws-s3-v0.6.2--ignore-dependenciesgeminstallbackports-v3.3.0--ignore-dependenciesgeminstallbrendanlim-sms-fu-v1.0.0--ignore-dependenciesgeminstallbuilder-v3.1.3

  7. ruby-on-rails - 未定义的方法每个 rails 错误 - 2

    我正在通过位于http://ruby.railstutorial.org的教程在Rails上试用ruby.我已经到了可以创建用户并将他们的姓名和头像显示在以下位置的地步:http://localhost:3000/users/1现在我想在用户访问时显示所有用户:http://localhost:3000/users/这是我的Controller:classUsersController这是我的看法。#Viewforindexactioninuser'scontroleerAllusers我收到以下错误。undefinedmethod`each'fornil:NilClass谁能告诉我为

  8. ruby-on-rails - 每个 Ruby 未定义的方法 - 2

    破败。一个人可以有很多出价,这个人只有一个出价。在我的索引操作中,我有@bids=Bid.find_by_person_id(params[:person_id])在我看来是的我得到NoMethodError:undefinedmethodeach'for#在访问人员出价的索引View时。这是因为这个人只有一个出价吗?我觉得不是这样,但除此之外我很茫然.. 最佳答案 find_by返回第一项。我想你在找Bid.where(person_id:params[:person_id]) 关于r

  9. ruby - 在 Ruby 中添加到数组中的每个元素 - 2

    有没有办法在数组的每个元素前加上一些东西。例如:file=File.new(my_file,'r')header=IO.readlines(my_file)[1]#headerlookslike[1,2,3]#Prependeachelelementofheaderwithfilename,somethinglikeheader.prepend(filename+".")#headerlookslike[filename.1,filename.2,filename.3] 最佳答案 您想使用map:["foo","bar","baz"

  10. ruby - 如何使用每个迭代器获取数组索引或迭代次数? - 2

    我正在用ruby​​遍历一个数组。有没有一种简单的方法可以在不返回for循环的情况下获取迭代次数或数组索引? 最佳答案 啊,知道了。each_with_index哇!编辑:糟糕! 关于ruby-如何使用每个迭代器获取数组索引或迭代次数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/706115/

随机推荐