2016-12-09 1 views
0

は、私は次のようなデータを持つ列nameageを持つテーブルがあるとし、いくつかの列の集計を取得:グループ行と

name | age 
------|----- 
harry | 12 
adam | 13 
eve | 14 
jill | 14 
John | 16 
alice | 19 
smith | 33 
bill | 43 
bob | 66 
jones | 78 

私が最初に年齢の昇順で行をアレンジしたい(すでにそれから私は、「グループのサイズ」を提供したい )以上行われ、num個の行がない場合は、最後のブロックが3未満とすることができるトップ

name | age 
------|----- 
harry | 12 
adam | 13 
eve | 14 
------------ 
jill | 14 
John | 16 
alice | 19 
------------ 
smith | 33 
bill | 43 
bob | 66 
------------ 
jones | 78 

から始まる3行のブロックでテーブルを分割するので、精神的に3を言います3の倍数。 各ブロックのageカラムのtopとbottomの値が必要です。だから、出力は次のようになります。

min age|max age 
-------|------- 
    12 | 14 
    14 | 19 
    33 | 66 
    78 | 78 

ネストされたテーブルを使用した素朴な方法は効率的ではありません。

select 
    min(T.age), 
    max(T.age) 
from 
    (select 
    age 
    from 
    users 
    order by age limit 3 offset 6 
) as T 

私は、行を選択しないと集計でのみ動作することを好みます。

データベース:MySQLとH2。

+0

あなたはMYSQLはすべてこれを行うにしたいですか、コードでこれをやって検討していますか? – RiggsFolly

+0

これはSQLコード自体で行います。 – Jus12

答えて

1

例えば:

SELECT MIN(age) 
    , MAX(age) 
    FROM 
    (SELECT x.* 
      , FLOOR(@i:[email protected]+1/3)*3 i 
     FROM my_table x 
      , (SELECT @i:=0) vars ORDER BY age,name) n 
     GROUP 
      BY i; 
関連する問題