2011-03-19 72 views
0

我想查询使用连接表,但我不能让这里成功我的表如何获得多个最大列值的MySQL

Score 
id , user_id ,  score , week 
1  , 123  ,  2  , 1 
2  , 432  ,  2  , 1 
3  , 432  ,  3  , 1 
4  , 123  ,  2  , 2 

我想在总和的基础查询前二十名的用户记录周1和第2周的最大总

我想要的结果应该是

id  , user_id  , week1score , week2score 
1  , 123  , 2   , 2 
2  , 432  , 3   , 0 

的公式是为了通过降总和(MAX(week1)+ MAX(week2))

感谢 伊纳姆

回答

1

这样的事情会做

SELECT t1.user_id, 
     SUM(week1score) AS week1score, 
     SUM(week2score) AS week2score 
FROM (SELECT user_id 
     FROM `table` 
     GROUP BY user_id) AS t1 
     JOIN (SELECT user_id, 
        Max(IF(`week` = 1, score, 0)) AS week1score, 
        Max(IF(`week` = 2, score, 0)) AS week2score 
      FROM `table` 
      GROUP BY user_id, 
         `week`) t2 
     ON t2.user_id = t1.user_id 
GROUP BY user_id 
ORDER BY (SUM(week1score) + SUM(week2score)) DESC 

您需要在下列的组合大指数

  • (USER_ID,一周,评分)
+0

有一个星期可以得到多个记录像第一周的问题可能有两个相同的用户得分,现在是2,3必须选择的最高分是3 – 2011-03-19 13:08:12

+0

我想按用户在第1周的最大记录数+第2周的用户最大记录数之和来订购。如此总和(max(week1)+ max(week2) )) – 2011-03-19 13:09:36

+0

你是真棒男人它工作只有一件事缺少,你使用SUM(分数)命令我想命令它作为总和(week1score + week2score)我怎么能做到这一点? – 2011-03-19 13:13:49