更新:重新格式化了整个问题
我有一个包含个人一级方程式比赛结果的数据库。每个车手根据他们完成的位置获得积分。现在我想为每个车手建立一个包含所有比赛的所有综合积分的表格。所以基本上是一个“车手排名”表。
我当然可以很容易地得到总分,但当多个车手的总分完全相同时,我就会遇到问题。在这些情况下,我需要检查哪一位车手的单场比赛成绩最好(或更多),因为他应该排在最后一位。
哦,在放置列上,“0”表示没有完成,所以这是最糟糕的结果。
简单的例子:
Event | Driver | Placement | Points
--------------------------------------
Race 1 | Driver A | 1 | 3
Race 1 | Driver B | 2 | 2
Race 1 | Driver C | 3 | 1
Race 2 | Driver A | 3 | 3
Race 2 | Driver B | 2 | 2
Race 2 | Driver C | 1 | 1
Race 3 | Driver A | 0 | 0
Race 3 | Driver B | 0 | 0
Race 3 | Driver C | 2 | 2
并请求完成表
Driver | Points
------------------
Driver C | 4
Driver A | 4
Driver B | 4
顺序是因为车手 C 有一个第一名和一个第二名。车手 A 有一个第一名和一个第三名,而车手 B 只有第二名。 (假设我的头脑正常,已经很晚了。)
硬例子http://sqlfiddle.com/#!9/16f9c5
想要的结果
| Driver | Points |
|------------------------|
| N. Hulkenberg | 43 |
| F. Massa | 43 |
| P. Wehrlein | 5 |
| D. Kvyat | 5 |
| M. Ericsson | 0 |
| P. Gasly | 0 |
| A. Giovinazzi | 0 |
| B. Hartley | 0 |
从 fiddle 数据中,我删除了除问题案例之外的所有内容。每个人至少与其他人有相同的积分,决胜局从一场比赛中的简单最佳成绩到最佳成绩的数量各不相同(4 次第六名的胜利优于 2 次第六名的胜利,就像 Hulkenberg 和 Massa 的情况一样)。
结果表是因为:
1. N. Hulkenberg - has four 6th place finishes
2. F. Massa - has two 6th place finishes
3. P. Wehrlein - has 8th place finish
4. D. Kvyat - has 9th place finish
5. M. Ericsson - has 11th place finish
6. P. Gasly - has 12th and 13th place finishes
7. A. Giovinazzi - has only one 12th place finish and nothing else
8. B. Hartley - has 13th place finish
所以真正有问题的决胜局是 [Hulkenberg vs Massa] 和 [Gasly vs Giovinazzi]
感谢任何帮助。
最佳答案
这应该可以在没有太多模糊的情况下达到目的。
SELECT
driver
,SUM(points) AS points
,CONCAT(GROUP_CONCAT(IF(placement = 0, 99, LPAD(placement,2,0)) ORDER BY IF(placement = 0, 99, placement) SEPARATOR ','), ',99') AS best
FROM
f1
GROUP BY
driver
ORDER BY
points DESC,
best
或者,如果您想隐藏展示位置排序数据列:
SELECT
driver
,SUM(points) AS points
FROM
f1
GROUP BY
driver
ORDER BY
points DESC
,CONCAT(GROUP_CONCAT(IF(placement = 0, 99, LPAD(placement,2,0)) ORDER BY IF(placement = 0, 99, placement) SEPARATOR ','), ',99')
在积分相同的情况下,它只是利用字母数字排序来确定最佳位置。
关于总计值相等时MYSQL子排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393969/
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
根据ActiveRecord::Base的文档:==(comparison_object)Returnstrueifcomparison_objectisthesameexactobject,orcomparison_objectisofthesametypeandselfhasanIDanditisequaltocomparison_object.id.Notethatnewrecordsaredifferentfromanyotherrecordbydefinition,unlesstheotherrecordisthereceiveritself.Besides,ifyoufet
文章目录一、概述简介原理模块二、配置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
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。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
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
我已经开始使用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
例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果
我有一个对象如下:[{:id=>2,:fname=>"Ron",:lname=>"XXXXX",:photo=>"XXX"},{:id=>3,:fname=>"Dain",:lname=>"XXXX",:photo=>"XXXXXXX"},{:id=>1,:fname=>"Bob",:lname=>"XXXXXX",:photo=>"XXXX"}]我想按fname排序,不区分大小写,所以它会导致编号:1,3,2我该如何排序?我正在尝试:@people.sort!{|x,y|y[:fname]x[:fname]}但这没有任何效果。 最佳答案