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)然后按顺序PER_USER_AVERAGE_BANDWIDTH生成如下结果:

╔═══════╦════════════════════════════╗
║ 用户 ║ PER_USER_AVERAGE_BANDWIDTH ║
╠═══════╬════════════════════════════╣
║ 用户3 ║ 110.37 ║
║ 用户 1 ║ 100.25 ║
║ 用户 2 ║ 75.70 ║
╚═══════╩════════════════════════════╝

像泥一样清澈;)有人吗?

4

3 回答 3

2

直接平均

SELECT 
  `user`,
  AVG( size / ( stop - start ) ) per_user_average_bandwidth
FROM
  tab_dl
GROUP BY `user`
ORDER BY per_user_average_bandwidth DESC

SQL 小提琴演示

于 2012-12-19T22:53:22.963 回答
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 回答