草庐IT

mysql - 排名 - 选择相应的列值到 MAX(column) 值

coder 2023-10-25 原文

我有一个包含以下字段的游戏表: user_id, level, clear_time

有 N 个级别,表格会跟踪用户何时越过某个级别。现在,我需要根据两个约束对用户进行排名:levelclear_time。很明显,更高级别的用户领先,但当不止一个用户处于同一级别时,clear_time 决定谁领先,即第一个清除该级别的用户领先。以下是我尝试过的方法,但没有按照我想要的方式工作。级别排序工作正常,但 clear_time 搞砸了。

SELECT 
    u.*,
    @rank := @rank + 1 rank
FROM
    ( SELECT
        t1.user_id user_id,
        MAX(t1.level) level,
        t1.clear_time clear_time,
        t2.username username
    FROM 
            gameplay t1
    INNER JOIN
        users t2
    ON
        ( t1.user_id = t2.id )
    GROUP BY
        user_id
    ORDER BY
        level DESC,
        clear_time ASC
    ) u
JOIN
    ( SELECT @rank := 0 ) r

我看到问题是 MAX(level) 没有得到相应的 clear_time。我无法完成它。 分析结果,我看到未选择 MAX(t1.level) 值的对应字段。我该如何实现?

最佳答案

听起来 gameplay 每个 user_id 都有多个条目。即:级别 x 和级别 y 的条目都具有相同的 user_id 并且您想要选择具有最高级别的行并且clear_time对应的值,但是MAX只会选择组中的最大级别,而不是同一行的clear_time值。

您可以在 gameplay 上使用额外的 JOIN 来完成此操作。编辑:这是我设置的示例:

MariaDB [test]> select * from gameplay;
+---------+---------------------+-------+
| user_id | clear_time          | level |
+---------+---------------------+-------+
|       1 | 2014-11-08 11:22:25 |     1 |
|       1 | 2014-11-09 11:22:40 |     2 |
+---------+---------------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | foo      |
+----+----------+
1 row in set (0.00 sec)

在此示例中,我们要选择的行是 level=2clear_time=2014-11-09 11:22:40。这是我的查询:

MariaDB [test]> SELECT t1.user_id, t2.username, t1.level, t3.clear_time
FROM 
   (SELECT user_id, max(level) as level FROM gameplay GROUP BY user_id) as t1
INNER JOIN (users t2, gameplay t3)
ON t1.user_id=t2.id AND t3.level=t1.level AND t3.user_id=t1.user_id;

+---------+----------+-------+---------------------+

| user_id | username | level | clear_time          |
+---------+----------+-------+---------------------+
|       1 | foo      |     2 | 2014-11-09 11:22:40 |
+---------+----------+-------+---------------------+
1 row in set (0.00 sec)

关于mysql - 排名 - 选择相应的列值到 MAX(column) 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818845/

有关mysql - 排名 - 选择相应的列值到 MAX(column) 值的更多相关文章

  1. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  2. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  3. 使用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

  4. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  5. ruby-on-rails - 在 Ruby on Rails 中添加 boolean 列值 - 2

    我正在开发一个创建网络博客的RubyonRails项目。我希望将一个名为featured的boolean数据库字段添加到Post模型中。该字段应该可以通过我添加的事件管理界面进行编辑。我使用了以下代码,但我什至没有在网站上显示另一列。$railsgeneratemigrationaddFeaturedfeatured:boolean$rakedb:migrate我是RubyonRails的新手,非常感谢任何帮助。我的index.html.erb文件中的相关代码(views):FeaturedPost架构.rb:ActiveRecord::Schema.define(:version=>

  6. ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres - 2

    我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d

  7. ruby-on-rails - 将 ruby​​ 数组转换为整齐的列字符串? - 2

    我是ruby​​的新手,我正在尝试制作一个程序来自动格式化给定的字符串和数组。我试图弄清楚的一种自动格式化功能是一种用于数组的功能。假设我有一个如下例所示的数组myArray=["a","b","c"]我想把它变成一个列化的字符串,这样putsmyString就会给出`1)a``2)b``3)c`我该怎么做呢?我能找到的最接近的东西是使用.each这不是我想要的,我不能让每一行都有一个单独的条目。这一切都必须是一个带有换行符的字符串。任何帮助将不胜感激,提前致谢 最佳答案 您可以使用.map与.with_index:myArray=

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  10. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

随机推荐