1

グラフを作成するためにデータベースからいくつかのクエリを実行しています。必要なグラフは、1 か月あたりの一連の値の中央値です。データセット全体の中央値を取得する方法は知っていますが、何らかの理由で GROUP BY MONTH(..) で月を区切ることができないため、月ごとの中央値が返されます。

これが私が持っているデータです。ビルドの種類に関係なく、毎月の中央値を取得したいと思います。

'Development', 1013.0164, 'June'
'Development', 1170.8999, 'July'
'Development', 671.2837, 'August'
'Flash Assets', 2961.3832, 'June'
'Flash Assets', 6662.2335, 'July'
'Flash Assets', 3902.5000, 'August'
'Release', 54.5499, 'June'
'Release', 62.4832, 'July'
'Release', 398.8500, 'August'
'Repackage', 1360.0834, 'June'
'Repackage', 6286.8505, 'July'
'Repackage', 1274.7833, 'August'
'Component', 16378.0161, 'June'
'Component', 6063.5482, 'July'
'Component', 23663.2496, 'August'
'Source Diff', 1503.8834, 'June'
'Source Diff', 1051.4500, 'July'
'Source Diff', 73.7002, 'August'

これで終わりにしたいのですが、

June, XXXX
July, XXXX
August, XXXX

ありがとう。

編集: 現在のクエリ

これは、全体の中央値を取得するために現在使用しているクエリです。これを月あたりの取得に変換する方法がわかりません。

 SELECT t.Data AS 'Median' FROM
 (SELECT CEIL(COUNT(*)/2.0) as 'Middle', s.Data as 'Data' FROM
 (SELECT bt.name as 'Labels', 
 SUM(TIME_TO_SEC(TIMEDIFF(bs.eventtime, b.submittime))/60.0) 
 AS 'Data', MONTHNAME(b.submittime) FROM builds b 
 JOIN buildstatuses bs ON bs.buildid = b.id 
 JOIN buildtypes bt ON bt.id = b.buildtype 
 WHERE MONTH(b.submittime) BETWEEN MONTH(CURDATE())-2 AND MONTH(CURDATE()) 
 AND bs.status LIKE 'Started HANDLER' 
 GROUP BY b.buildtype, MONTH(b.submittime) ORDER BY 'Data' ) s )t;
4

2 に答える 2

1

あなたの値が常にフロートである場合...これを試すことができます-

Dataが値列であると仮定します

select mth,
substring_index
(
  substring_index
  (
    group_concat(Data order by Data), ',', 
    count(*)/2+1
  ), 
  ',', -1
)
from your_tables
group by mth;
  • group_concat月の値を昇順に並べ替えます
  • first を使用するとsubstring_index、最初の値から中間値 +1 の位置に戻ります
  • 次に、substring_index最も適切な値 (中央値) を取得するのに役立ちます。
于 2011-08-08T13:49:03.837 に答える
1

mysql の集約関数のディスカッション ページにいる人々は、最終的に一時テーブルに行き着きます。そこで「中央値」で検索してください。

于 2011-08-08T13:31:03.240 に答える