我该如何进行此查询?

Duc*_*tal 4 php mysql sql

这是测试表

----------------------------------------------
id | username | point | level | created_date
----------------------------------------------
 1 | name_a   |  1    |   1   | 2011-08-01
 2 | name_a   |  2    |   2   | 2011-08-02
 3 | name_b   |  5    |   1   | 2011-08-02
 3 | name_c   |  6    |   1   | 2011-08-02
 4 | name_d   |  1    |   1   | 2011-08-01
 5 | name_d   |  3    |   1   | 2011-08-02
 5 | name_d   |  5    |   2   | 2011-08-03
 4 | name_e   |  5    |   1   | 2011-08-01
 5 | name_e   |  5    |   2   | 2011-08-02
 5 | name_e   |  5    |   3   | 2011-08-03
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

查询的要求是查询(尽可能在一个查询中)用户名,表的点.

  1. 按每个级别的用户得分总和排序.
  2. 如果用户在同一级别上获得2分,则只能获得最新分数.
  3. 按用户名分组
  4. 总分必须小于10
  5. 每个级别的得分最高为5

输出样本:

--------------------
 username  | tpoint|
--------------------
  name_d   |  8    |
  name_b   |  5    |
  name_a   |  3    |
--------------------
Run Code Online (Sandbox Code Playgroud)

name_ename_c被忽略.

Rob*_*lin 7

听起来很有趣!

SELECT username, SUM(point) AS points
FROM (SELECT username, level, point
      FROM (SELECT username, level, LEAST(point, 5) AS point
            FROM table
            WHERE points <= 5
            ORDER BY created_date DESC) AS h
      GROUP BY username, level) AS h2
GROUP BY username
HAVING points < 10
ORDER BY points DESC
Run Code Online (Sandbox Code Playgroud)

这应该做到!只需替换"表".

编辑:

是否要排除得分超过5或值为5的行?如果是这样,只需删除WHERE点<= 5.