0

これに対して多くの同様の質問がありましたが、私がやろうとしていることを正確に行う方法を見つけることができませんでした. 列に重複エントリの集計を続け、その数を「所有者番号」列に報告する必要があります。以下の例:

Roll Number  |  Owner Name  |  Owner Number
000001       |  Patrick H.  |  1
000001       |  Paula H.    |  2
000002       |  Fred R.     |  1
000003       |  Chris P.    |  1
000003       |  Kayla A.    |  2
000003       |  Phil J.     |  3

つまり、各ロールの所有者の総数だけでなく、その時点までに各ロールに何人の所有者がいるかを数えればよいだけです。どんな助けでも大歓迎です。

4

2 に答える 2

1

Mysql はウィンドウ関数をサポートしていませんが、変数を使用して実行できます。

SET @num=0;
SET @roll='';
SELECT `Roll Number`,`Owner Name`,`Owner Number`
FROM
(
SELECT `Roll Number`,
`Owner Name`,
(CASE WHEN @roll=`Roll Number` 
                            THEN @num:=@num+1 ELSE
                            @num:=1 END) as `Owner Number`,
@roll:=`Roll Number`
FROM table1
  ) as q;

http://sqlfiddle.com/#!2/788a4/5

于 2013-03-27T18:18:51.793 に答える
0

これは、1 つまたは 2 つのサブクエリと @variable を使用して行うことができます

すなわちhttp://sqlfiddle.com/#!2/7c2fa/7

SELECT

  -- Re-selected at this level to tidy up the calculation fields
  f.rollNumber,
  f.ownerName,
  f.ownerNumber

FROM (
  SELECT

    d.rollNumber,
    d.ownerName,
    -- If the current roll number equals the previous, increment, else reset to 1
    @i := IF(d.rollNumber=@last,@i+1,1) AS ownerNumber,
    -- Sets @last to be == the "current" one for use on next row
    @last := d.rollNumber

  FROM
  (
      -- Get the raw data ordered by roll number
      SELECT

          LPAD(rollNumber,6,'0') rollNumber,
          ownerName

      FROM someTable
      -- Reorder / filter as much as you like, but always rollNumber ASC first
      ORDER BY
          rollNumber ASC,
          ownerName ASC
  ) d,(
      -- Set up the variables we will need shortly
      SELECT @i:=0,@last:=0
  ) v
) f;
于 2013-03-27T18:19:40.883 に答える