【发布时间】:2019-05-17 16:29:36
【问题描述】:
我正在尝试生成一个 SQL 语句来对每个用户 ID 的类别中的前 5 个值求和,以创建一个总体总数。这可能吗?我该如何实现?我可以对单个类别或所有类别的前 5 个进行求和,但很难了解如何将每个单独的类别加在一起。
例如,
ID Cater Weight
--------------------------------
1 Cheese 10
2 Bacon 15
1 Cheese 5
2 Bacon 10
1 Cheese 22
2 Cheese 5
1 Bacon 10
1 Cheese 10
2 Cheese 5
1 Cheese 20
2 Bacon 10
1 Cheese 30
我正在寻找的结果是,
ID Total_Weight
-------------------
1 102 Top 5 Cheese (10+22+10+20+30) + Top 5 Bacon (10)
2 45 Top 5 Cheese (5+5) + Top 5 Bacon (15+10+10)
前 5 名之外的任何值都将被忽略。
下面的代码显示所有类别的前 5 个权重的总和作为总权重。我可以从一个声明中实现我想要的吗?
$log = "SELECT id, cater,
SUM(weight) AS total_weight
FROM ( SELECT id,
CASE WHEN @ID = ID THEN @ROW_NUMBER := @ROW_NUMBER + 1
ELSE @ROW_NUMBER := 1
END AS rn,
cater,
weight,
@id := id
FROM individual,
(SELECT @ROW_NUMBER := 1, @ID := '') r
ORDER
BY
id, weight DESC
) TMP
WHERE rn <= 5
AND cater <> ''
GROUP
BY id
ORDER
BY total_weight DESC";
【问题讨论】:
-
类似于this article 在外部查询中带有 SUM /GROUP。
-
没有 PRIMARY KEY,你就没有真正的桌子