gpt4 book ai didi

php - SQL 按两列分组和排序

转载 作者:可可西里 更新时间:2023-11-01 00:00:49 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
SQL ORDER BY total within GROUP BY

更新:我找到了我的解决方案,我已经发布了 here 。感谢大家的帮助!


我正在开发一个需要排行榜的 Facebook 应用程序。记录完成游戏所需的分数和时间,这些首先按分数组织,然后在两个相同分数的情况下使用时间。如果用户玩了多次,则使用他们的最好成绩。

得分越低,游戏表现越好。

我的表结构是:

id
facebook_id - (Unique Identifier for the user)
name
email
score
time - (time to complete game in seconds)
timestamp - (unix timestamp of entry)
date - (readable format of timestamp)
ip

我认为可行的查询是:

SELECT *
FROM entries
ORDER BY score ASC, time ASC
GROUP BY facebook_id

我遇到的问题是,在某些情况下,它会提取用户在数据库中的第一个分数,而不是他们的最高分数。我认为这取决于 GROUP BY 语句。我原以为 ORDER BY 语句会解决这个问题,但显然不是。

例如:

----------------------------------------------------------------------------
| ID | NAME | SCORE | TIME | TIMESTAMP | DATE | IP |
----------------------------------------------------------------------------
| 1 | Joe Bloggs | 65 | 300 | 1234567890 | XXX | XXX |
----------------------------------------------------------------------------
| 2 | Jane Doe | 72 | 280 | 1234567890 | XXX | XXX |
----------------------------------------------------------------------------
| 3 | Joe Bloggs | 55 | 285 | 1234567890 | XXX | XXX |
----------------------------------------------------------------------------
| 4 | Jane Doe | 78 | 320 | 1234567890 | XXX | XXX |
----------------------------------------------------------------------------

当我使用上面的查询时,我得到以下结果:

 1. Joe Bloggs - 65 - 300 - (Joes First Entry, not his best entry) 
2. Jane Doe - 72 - 280

我本以为...

 1. Joe Bloggs - 55 - 285 - (Joe's best entry)
2. Jane Doe - 72 - 280

这就像 Group By 忽略了 Order - 只是覆盖了值。

将 MIN(score) 与 group by 一起使用会选择最低分数,这是正确的 - 但是它合并了数据库中用户第一条记录的时间,因此经常返回错误。

那么,我如何才能选择用户的最高分以及相关联的时间、姓名等,并按分数、时间对结果进行排序?

提前致谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com