10

サンプルデータ:

╔════╦════════════╦════════════╦═══════╦══════════ ═╦════════╗
║ ID ║ 開始 ║ 停止 ║ ユーザー ║ ファイル ║ サイズ ║
╠════╬════════════╬════════════╬═══════╬══════════ ═╬════════╣
║ 1 ║ 1330133409 ║ 1330133410 ║ user1 ║ file1.zip ║ 300000 ║
║ 2 ║ 1330133409 ║ 1330133410 ║ user1 ║ file2.zip ║ 300500 ║
║ 3 ║ 1330133409 ║ 1330133410 ║ user2 ║ file1.zip ║ 300000 ║
║ 4 ║ 1330133409 ║ 1330133410 ║ user2 ║ file2.zip ║ 300500 ║
║ 5 ║ 1330133409 ║ 1330133410 ║ user1 ║ file3.zip ║ 500000 ║
║ 6 ║ 1330133409 ║ 1330133310 ║ user6 ║ file3.zip ║ 500000 ║
╚════╩════════════╩════════════╩═══════╩══════════ ═╩════════╝

PER_USER_AVERAGE_BANDWIDTHwhereを計算する MySQL クエリを作成しPER_USER_AVERAGE_BANDWIDTH = SUM(SIZE) / (STOP - START)、次に order byPER_USER_AVERAGE_BANDWIDTHして次のような結果を生成する必要があります。

╔═══════╦════════════════════════════╗
║ ユーザー ║ PER_USER_AVERAGE_BANDWIDTH ║
╠═══════╬════════════════════════════╣
║ ユーザー 3 ║ 110.37 ║
║ ユーザー 1 ║ 100.25 ║
║ ユーザー 2 ║ 75.70 ║
╚═══════╩════════════════════════════╝

泥のようにクリア;) 誰か?

4

3 に答える 3

2

あなたの平均は、ユーザーごとにグループ化された、合計期間に対する合計サイズである必要があると思います。

SELECT   USER,
         SUM(SIZE) / SUM(STOP - START) AS PER_USER_AVERAGE_BANDWIDTH
FROM     my_table
GROUP BY USER
ORDER BY PER_USER_AVERAGE_BANDWIDTH DESC

sqlfiddleで参照してください。

于 2012-12-19T22:42:43.957 に答える
0

このクエリはそれを行う必要があります:

SELECT USER, (SUM(SIZE) / (STOP - START)) AS PER_USER_AVERAGE_BANDWIDTH
FROM table
GROUP BY USER, stop, start
ORDER BY PER_USER_AVERAGE_BANDWIDTH DESC

これにより、一意の時間枠ごとのユーザーあたりの平均帯域幅が得られます (つまり、ユーザーが時刻 1 と時刻 5 の間にファイル 1 とファイル 2 をダウンロードし、時刻 1 と時刻 10 の間にファイル 3 をダウンロードした場合、ユーザーに対して 2 行が得られます)。

于 2012-12-19T22:44:16.677 に答える