如何在连接表时对值进行求和?

ker*_*lin 2 mysql sql

<hyperbole>根据您的真实情况,无论谁回答这个问题,都可以为解决世界上最具挑战性的SQL查询提供信誉.</hyperbole>

使用3个表:用户,徽章,奖励.

关系:用户有很多奖项; 奖项属于用户; 徽章有很多奖项; 奖项属于徽章.因此,badge_id和user_id是奖励表中的外键.

这里的业务逻辑是每次用户赢得徽章时,他/她都会将其作为奖励收到.用户可以多次获得相同的徽章.每个徽章都分配了一个指定的点值(point_value是徽章表中的一个字段).例如,BadgeA可以值500点,BadgeB 1000点,等等.举个例子,假设UserX赢了BadgeA 10次,BadgeB赢了5次.BadgeA值500点,BadgeB值1000点,UserX累计累积10,000点((10 x 500)+(5 x 1000)).

这里的最终游戏是返回累积最多徽章积分的前50名用户的列表.

你可以做到吗?

Mos*_*Bin 5

我的样本表是:

用户:

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| name  | varchar(200) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

徽章:

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| score | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

奖:

+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id       | int(11) | YES  |     | NULL    |       |
| user_id  | int(11) | YES  |     | NULL    |       |
| badge_id | int(11) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)

因此查询是:

SELECT user.name, SUM(score)
  FROM badge JOIN award ON badge.id = award.badge_id
       JOIN user ON user.id = award.user_id
 GROUP BY user.name
 ORDER BY 2
 LIMIT 50
Run Code Online (Sandbox Code Playgroud)