1

这有点难以解释,所以我会一步一步地做。下面是我创建的表。

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;
4

2 回答 2

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;

看到答案。在这里寻找你需要的东西

于 2013-07-07T08:00:25.987 回答
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 演示以获得完整的工作演示。

于 2013-07-07T07:59:44.460 回答