这有点难以解释,所以我会一步一步地这样做。下面是我创建的表格。
id | item_1 | item_2 | item_3|
32 | 1 | 43 | 54 |
32 | 54 | 32 | 32 |
67 | 42 | 45 | 12 |
正如你所看到的,前两行有相同的id,我的目标是,得到第一行的总和(1 + 43 + 54),第二行的总和是(54 + 32) +32),然后添加具有相同ID的两行,并从最高到最低排序。我设法使用下面的代码执行此操作。但是如果我想得到行的position
怎么办,如下表所示。我基本上做了一些排名系统,我首先通过item_sum对它们进行排序然后得到行的位置。我怎样才能实现它?
position | id | item_sum |
1 | 32 | 218 |
2 | 67 | 99 |
select
id,
sum(item_1+item_2+item_3) as item_sum
from yourtable
group by id
order by item_sum desc;
我尝试过以下代码:但由于我按'item_sum'设置了订单,因此位置编号不合适
SET @position=0;
SELECT @position:= @position+1 AS position,
id,
sum(item_1+item_2+item_3) as item_sum
from yourtable
group by id
order by item_sum desc;
答案 0 :(得分:2)
SELECT @rn:=@rn+1 AS position, item_sum , id
FROM (
select
id,
sum(item_1+item_2+item_3) as item_sum
from yourtable
group by id
order by item_sum desc
) t1, (SELECT @rn:=0) t2;
答案 1 :(得分:0)
假设我理解你的问题,这应该可以正常工作:
SELECT `yourtable`.`id` AS `id`,
`count`.`total` AS `item_count`
FROM `yourtable`
LEFT JOIN (
SELECT `id`, SUM(`item_1` + `item_2` + `item_3`) AS `total`
FROM `yourtable` GROUP BY `id`
) `count` ON `count`.`id` = `yourtable`.`id`
GROUP BY `yourtable`.`id`
ORDER BY `count`.`total` DESC
以上将返回:
+--------+------------+
| id | item_count |
+--------+------------+
| 32 | 216 |
| 67 | 99 |
+--------+------------+
请参阅SQLFiddle demo了解完整的工作示范。