-2

次のようなテーブルがあります。

CREATE TABLE tbltest (
  Col1           Integer(10) UNSIGNED,
  Col2           Integer(10) UNSIGNED
)

サンプル値があります:

Col1 Col2
---------
1     1   
2     1   
3     1   
4     1   
5     1   

6     2   
7     2   
8     2   
9     2   
10    2   

11    1   
12    1   
13    1   
14    1   
15    1   

SELECT SUM(col1) GROUPBYすべての値ではなく、col2 の値をシーケンスしたい。上記のデータの結果は次のようになります。

col1 col2 
---------
15    1   
40    2   
75    1   

クエリがどのように見えるかわかりません。また、この悪いタイトルをお許しください。何と呼べばいいのかわからない。

ありがとう

4

3 に答える 3

3

MySQL には分析関数がないため、少し複雑なバージョンです。私はそれSUMval1あなたが必要としているものだと思っています。

SELECT SUM(val1) val1, MAX(val2) val2
FROM (
  SELECT s1.val1, COUNT(s3.val1) grouping, s1.val2 val2
  FROM sequence s1
  LEFT JOIN sequence s2 ON s1.val1 >= s2.val1
  LEFT JOIN sequence s3 ON s3.val1 = s2.val1 - 1 AND s2.val2 <> s3.val2
  GROUP BY s1.val1
) a
GROUP BY grouping
ORDER BY grouping

でテストする SQLfiddle

grouping順序を明確にするために選択リストに追加すると、

val1    val2    grouping
15      1       0
40      2       1
65      1       2
于 2013-07-28T10:04:28.900 に答える
1

SUM() 関数と GROUB BY を使用する必要があります。

だからあなたが探している答えを得るために

私が得ることができる最も近いものは、他の列を追加しないことです:

SELECT SUM(val1) as total1, val2 FROM table_name
GROUB BY table_name.val2

結果:

total1 val2
---------
93    1
30    2

次のように、3 つのグループを区別するために、3 番目の列を使用可能にする必要がある場合があります。

val1 val2 val3(new)
---------------
1    1   1
2    1   1
3    1   1
...  ..  ..
6    2   2
7    2   2
...  ..  ..
11   1   3
12   1   3
...  ..  ..
15   1   3

次に、SQL クエリは次のようになります。

SELECT SUM(val1) as total2, val2 FROM table_name
GROUB BY table_name.val2, table_name.val3

結果:

total1 val2
---------
15    1
30    2
78    1

ここにリンクの説明を入力することを参照してください

于 2013-07-28T10:03:40.957 に答える
0

これを試して

    select sum(val1) as val1, val2 from table1
    group by val2
于 2013-07-28T10:01:47.367 に答える