mysql - SQL通过多对多关系中的数据选择最大的10个条目
问题描述
我有一个 SQL 数据库,其中包含一个 User 对象、一个 Guild 对象和一个 GuildMember 对象。用户可以在许多公会中,并且公会可以有许多用户,因此 GuildMember 对象将它们链接起来。User 对象包含他们当前资金余额的值,我正在寻找一种方法来获得特定行会中最富有的用户。现在我只是从公会中获取所有用户并自己对其进行排序,但公会中可能有多达 10 万用户,这似乎非常低效。有没有办法让 SQL 做更多的工作?基本上,我只是想找出一个语句来从公会 ID 返回前 10 名左右最富有的用户。我正在运行一个 MySQL 数据库。
模型:
用户 --> GuildMember <-- 公会
id: 字符串 | UID:字符串 | 标识:字符串
经济:整数 | GID:字符串 | 其他数据
我一直在使用 Sequelize(尽管我非常愿意使用准备好的 SQL 语句),这是我当前在 TypeScript 中的系统:
public static async getTop(guildId: string, num: number) {
return Db.Guild.findByPk(guildId, { include: [{ model: Db.User, attributes: ['id', 'econ'] }] })
.then(guild => (<UserInstance[]>guild.Users).sort((a, b) => b.econ - a.econ).slice(0, num));
}
样本数据:
用户:id:1,经济:10
用户:id:2,经济:3
...
用户:ID:7,经济 12
--
公会:id:1,其他数据
公会:id:2,其他数据
--
GuildMember: UserId: 1, GuildId: 2
GuildMember:用户 ID 7,GuildId:2
--
查询公会 2 中最富有的人的预期输出:[用户 7,用户 1]。
显然这是一个非常简单的例子,因为用户可能属于多个公会,每个公会会有数千个用户。我需要返回前 10 名。
解决方案
推荐阅读
- ios - RxDataSources itemDeselected 没有被调用
- c# - 如何使用 SqlDataReader 返回和使用 IAsyncEnumerable
- javascript - 如何仅在按下键后运行我的功能?
- node-red - JSONata Node-RED 节点。在哪里可以找到
- flask - 使用烧瓶炼金术 API 发布方法的问题不起作用
- javascript - 如何比较数组中的每个元素并将具有相同数据的元素分组(在我的情况下为日期)?JavaScript
- python - 将复杂列表转换为数据框表,第一个值作为第二列标题
- javascript - 用 Icon 和 TouchableHighlight 反应原生工具提示?
- animation - 让 rotateTransition 和 pathtransition 在可调整大小的窗口上工作
- django - 后退按钮存储以前的数据 DJANGO