gpt4 book ai didi

sql - 连接表时如何对值求和?

转载 作者:行者123 更新时间:2023-11-29 01:12:31 27 4
gpt4 key购买 nike

<hyperbole>根据您的真实情况,无论谁回答了这个问题,都可以声称自己解决了世界上最具挑战性的 SQL 查询。 </hyperbole>

使用 3 个表:用户、徽章、奖励。

关系:用户有很多奖项;奖励属于用户;徽章有很多奖项;奖项属于徽章。所以 badge_id 和 user_id 是 awards 表中的外键。

此处的业务逻辑是,每当用户赢得徽章时,他/她就会收到徽章作为奖励。一个用户可以多次获得同一徽章。每个徽章都分配了一个指定的点值(point_value 是徽章表中的一个字段)。例如,BadgeA 可以值 500 点,BadgeB 1000 点,等等。作为进一步的示例,假设 UserX 赢得了 BadgeA 10 次和 BadgeB 5 次。 BadgeA 值(value) 500 Points,BadgeB 值(value) 1000 Points,UserX 总共累积了 10,000 Points ((10 x 500) + (5 x 1000))。

这里的最终目的是返回累积徽章点数最多的前 50 名用户的列表。

你能做到吗?

最佳答案

我的示例表是:

用户:

+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+

徽章:

+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| score | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+

奖励:

+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| user_id | int(11) | YES | | NULL | |
| badge_id | int(11) | YES | | NULL | |
+----------+---------+------+-----+---------+-------+

因此查询是:

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

关于sql - 连接表时如何对值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658246/

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