1

これを説明するのはちょっと難しいので、順を追って説明します。以下は私が作成した表です。

id  | item_1 | item_2 | item_3|
32  |   1    |   43   |  54   |
32  |   54   |   32   |  32   |
67  |   42   |   45   |  12   |

ご覧のとおり、最初の 2 行の ID は同じです。私の目標は、最初の行の合計 (1+43+54) と 2 番目の行の合計 (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 に答える