在Rails中比较mysql条目的简便方法

时间:2013-05-16 19:50:19

标签: mysql ruby-on-rails ruby

在我的数据库中,我有以下条目:

username score     date
User1      10    1/1/2013
User2       4    1/1/2013
User3       4    1/1/2013
User4       5    1/1/2013

...

User1       1    10/1/2013
User2       3    10/1/2013
User3       4    10/1/2013
User4      17    10/1/2013

我需要找到最多用户得分。这并不容易,因为有大约30,000用户。所以我认为有更多的方法比查询它们并做数学

UPD:此外,日期以日期时间格式存储,我不知道存储得分的确切时间......

2 个答案:

答案 0 :(得分:0)

如果“改变了最多”,你的意思是“改变了最多次”,那么SQL将是这样的:

SELECT username, COUNT(*) as times_changed FROM table_name GROUP BY username ORDER BY times_changed DESC LIMIT 1;

您可以使用以下命令运行:

 result = ActiveRecord::Base.connection.execute(sql)

如果表格很大,最好在每个用户记录中缓存“更改次数”。

如果您的意思是“更改了两个给定日期之间的最大数字量”,那么SQL将如下所示:

SELECT t1.username, ABS(t1.score - t2.score) AS difference FROM table_name AS t1 JOIN table_name AS t2 WHERE t1.username = t2.username AND t1.date = 'date here' AND t2.date = 'other date here';

答案 1 :(得分:0)

假设,为了获得在该表格布局中具有最大分数差异的用户:

Select username, max(score) 
from (
    select C1.username, abs(C1.score - C2.score) score from table_name C1, table_name C2 
    where C1.username = C2.username and C1.score <> C2.score
) as T;