2017-06-29 11 views
1

を注文するとmysqlデータベースのコンピューティング私が持っている(ここではn = 14)データのn行の次の表:グループ化と

id | a | b | c | d | e  -----> fields (id is the primary key) 
+---+-------+-------+-------+-------+------ 
0 | a0 | b0 | c0 | d0 | e0 
1 | a1 | b1 | c1 | d1 | e1 
2 | a2 | b2 | c2 | d2 | e2 
3 | a3 | b3 | c3 | d3 | e3 
+---+-------+-------+-------+-------+------ 
4 | a4 | b4 | c4 | d4 | e4 
5 | a5 | b5 | c5 | d5 | e5 
6 | a6 | b6 | c6 | d6 | e6 
7 | a7 | b7 | c7 | d7 | e7 
+---+-------+-------+-------+-------+------ 
8 | a8 | b8 | c8 | d8 | e8 
9 | a9 | b9 | c9 | d9 | e9 
10 | a10 | b10 | c10 | d10 | e10 
11 | a11 | b11 | c11 | d11 | e11 
+---+-------+-------+-------+-------+------ 
12 | a12 | b12 | c12 | d12 | e12 
13 | a13 | b13 | c13 | d13 | e13 
+---+-------+-------+-------+-------+------ 

は今(も+他の整数値をVEの持っている可能性がありメートル)m = 4を考えます。
私は次のようにmidの昇順でともにデータが行の残りの部分を取るためにグループにワンド:

id | a | b | c | d | e 
+---+-------+-------+-------+-------+------ 
0 | a0 | b0 | c0 | d0 | e0 
1 | a1 | b1 | c1 | d1 | e1 
2 | a2 | b2 | c2 | d2 | e2 
3 | a3 | b3 | c3 | d3 | e3 
+---+-------+-------+-------+-------+------ 
4 | a4 | b4 | c4 | d4 | e4 
5 | a5 | b5 | c5 | d5 | e5 
6 | a6 | b6 | c6 | d6 | e6 
7 | a7 | b7 | c7 | d7 | e7 
+---+-------+-------+-------+-------+------ 
8 | a8 | b8 | c8 | d8 | e8 
9 | a9 | b9 | c9 | d9 | e9 
10 | a10 | b10 | c10 | d10 | e10 
11 | a11 | b11 | c11 | d11 | e11 
+---+-------+-------+-------+-------+------ 
12 | a12 | b12 | c12 | d12 | e12 
13 | a13 | b13 | c13 | d13 | e13 
+---+-------+-------+-------+-------+------ 

それから私は、クエリは次のようなデータを取得したい:

idd | aa | bb    | cc    | dd | ee 
+----+-------+-----------------+-------------------+-------+--------------+ 
0 | a0 | max(b0,..,b3) | min(c0,...,c3) | d3 | (e0+...+e3) 
1 | a4 | max(b4,..,b7) | min(c4,...,c7) | d7 | (e4+...+e7) 
2 | a8 | max(b8,..,b11) | min(c8,...,c11) | d11 | (e8+...+e11) 
3 | a12 | max(b12,b13) | min(c12,c13)  | d13 | (e12+e13) 
+----+-------+-----------------+-------------------+-------+--------------+ 

私は、MySQLデータベース(Ubuntu)を初めて使用していて、解決のために何度も試してゴーグルを試しています。
誰かが私にmySQLクエリを表示してそれを達成する方法があれば、非常に役に立ちます。事前に

idd | aa | bb    | cc    | dd | ee 
+----+-------+-----------------+-------------------+-------+--------------+ 
0 | a0 | max(b0,...,b4) | min(c0,...,c4) | d4 | (e0+...+e4) 
1 | a5 | max(b5,...,b9) | min(c5,...,c9) | d9 | (e5+...+e9) 
2 | a10 | max(b10,..,b13)| min(c10,..,c13) | d13 | (e10...+e13) 
+----+-------+-----------------+-------------------+-------+--------------+ 

ありがとう:

m = 5についての問合せは、次のデータを返す必要があります。 。 。

+0

文字列プレースホルダの代わりに実際のデータを入力した場合は、あなたの質問が少し簡単になりました。 –

答えて

1

すでに行番号のように動作するid列があるため、4レコードのバッチでグループ化する場合は、idを4で割って集計し、整数に切り捨てることができます。これらの値を4で割ると1より小さいので、idの値は0から3の値を持つことになります。同様に、次の4つのレコードidの値は4から7までです。ここ

enter image description here

デモ:1.

SELECT 
    TRUNCATE(t1.id/4, 0) AS idd, 
    MAX(CASE WHEN t1.id = (SELECT MIN(t2.id) FROM yourTable t2 
          WHERE TRUNCATE(t2.id/4, 0) = TRUNCATE(t1.id/4, 0)) 
      THEN t1.a END) AS aa, 
    MAX(t1.b) AS bb, 
    MIN(t1.c) AS cc, 
    MAX(CASE WHEN t1.id = (SELECT MAX(t2.id) FROM yourTable t2 
          WHERE TRUNCATE(t2.id/4, 0) = TRUNCATE(t1.id/4, 0)) 
      THEN t1.d END) AS dd, 
    SUM(t1.e) AS ee 
FROM yourTable t1 
GROUP BY 
    TRUNCATE(t1.id/4, 0); 

出力のグループ

Rextester

+0

クイック返信をありがとう。しかし、MIN(a)AS aaは私が望むものではありません。グループの最初の値、つまりグループのMIN値ではなく、 'aa - > a0、a4、a8、a12'を求めます。同様にbbについては、各グループのbの最後の行の値が必要です。 – iPD

+0

@iPD回答を更新しました。各グループの最初と最後を取得するために、私は相関サブクエリを使用しました。 –

+0

どうもありがとうございました。私は何日も苦労していた。私はあなたの答えを確認し、それを受け入れます。再度、感謝します。 – iPD