gpt4 book ai didi

mysql - 需要帮助构建 SQL SELECT 语句以获取 "top 10 x"

转载 作者:可可西里 更新时间:2023-11-01 07:57:00 26 4
gpt4 key购买 nike

我有这个 Points 表:

===========================================FIELD           :      TYPE===========================================id                 int(11)user_id            int(11)value              int(11)type               enum('add','subtract')timestamp          int(11)===========================================

基本上这个表存储的是用户积分的记录。

现在我的问题是:如何获取总积分最高的前10名用户?

注意:我被告知要更改我的架构——删除“类型”字段并为“值”字段输入正值和负值。我只想知道我是否可以使用当前模式实现所需的查询。

提前致谢

最佳答案

我会尝试这样的事情:

SELECT
user_id,
SUM( IF(`type`='add',+1,-1) * `value`) AS user_points
FROM Points
GROUP BY user_id
ORDER BY SUM( IF(`type`='add',+1,-1) * `value`) DESC
LIMIT 10

似乎有效:http://sqlfiddle.com/#!2/dd207/1

替代方案,也许更快,也许不是,诀窍是从内部查询中移出 SUM(IF()) 部分:

http://sqlfiddle.com/#!2/dd207/9

SELECT
user_id,
SUM( IF(`type`='add',+1,-1) * `valuesum`)
FROM (
SELECT
user_id,
`type`,
SUM(`value`) AS `valuesum`
FROM Points
GROUP BY user_id, `type`
) AS p
GROUP BY p.user_id
ORDER BY SUM( IF(`type`='add',+1,-1) * `valuesum`) DESC
LIMIT 10

可能这两种解决方案都必须进行全表扫描以汇总所有内容,因此这种情况可能适合进行一些明智的非规范化(例如,在另一个表中收集每个用户的总和)。

关于mysql - 需要帮助构建 SQL SELECT 语句以获取 "top 10 x",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11163650/

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