复杂的mySQL按顺序查询

复杂的mySQL按顺序查询,mysql,Mysql,示例数据: ╔════╦════════════╦════════════╦═══════╦═══════════╦════════╗ ║ ID ║ START ║ STOP ║ USER ║ FILE ║ SIZE ║ ╠════╬════════════╬════════════╬═══════╬═══════════╬════════╣ ║ 1 ║ 1330133409 ║ 1330133410 ║ user1 ║ file1.zip ║ 30000

示例数据:

╔════╦════════════╦════════════╦═══════╦═══════════╦════════╗ ║ ID ║ START ║ STOP ║ USER ║ FILE ║ SIZE ║ ╠════╬════════════╬════════════╬═══════╬═══════════╬════════╣ ║ 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 ║ ╚════╩════════════╩════════════╩═══════╩═══════════╩════════╝
清澈如泥;)有人吗?

我认为您的平均值应该是总持续时间内的总大小,按用户分组:

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

请在上查看。

此查询应该可以:

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行带宽)。

直接获得平均带宽

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

+1,用于可爱的布局。自从Dos 2.0的Paradox以来,你没有见过这种情况吗?你显示了
user1
user2
user6
的数据-结果集中的
user3
来自哪里?另外,如何在
(停止-启动)
中只使用一行,而在
中求和(大小)
(多行)?有三行用于
user1
——您希望哪一行用于该部分计算?(是的,我意识到在这种情况下,
STOP
START
对于所有三行都是相同的值,但是数据库在解析SQL时不知道这一点。)@TonyHopkinson:这应该是我的+1!(脸)仅供参考@eggyal,+1,以确保您获得信用。:)这根本没有回答问题-请参见-顺便说一句,使用唯一的
ID
启动、停止
,就像
按ID分组一样;o) 我可能不清楚。差不多了。应该是该用户下载的所有文件的每个用户的平均带宽。因此,每个用户一个结果。@SirRufo是在问题被编辑之前留下的,我最初更新了我的答案,在列被清除之前。@DanielAbrams假设每个用户只有一个时间段,否则计算将不正确。@DanielAbrams如果你接受,你应该接受-这不是平均值。它是总带宽。不同的事情。用铅笔和纸,你会得到的。@Bohemian:这肯定是平均水平。想象100次传输,一次1Gb/1,另一次99次1B/1000;我计算总传输量(1.0000000 9Gib)并除以总持续时间(99001s),得到84.7kbps的(加权)平均吞吐量。相反,鲁福爵士的回答得到了81.9Mbps的未加权平均值。我把这个问题解释为要求“正常”(即未加权)平均值。你的答案给出了加权平均数,也可能是一个合理的解释。两者都是有效和有用的统计数据。我认为正常的平均值更有用,因为一次糟糕的下载体验恰好是一次出价下载,并不会破坏99次小文件的良好下载体验。@Bohemian:相反,情况正好相反。在我上面给出的例子中,有1次很棒的下载体验(8Gbps),然后是99次糟糕的下载体验(0.008bps)。未加权平均值产生了相当不错的81.9Mbps,与加权平均值84.7kbps相比,它较少考虑更常见的糟糕下载体验!
SELECT 
  `user`,
  AVG( size / ( stop - start ) ) per_user_average_bandwidth
FROM
  tab_dl
GROUP BY `user`
ORDER BY per_user_average_bandwidth DESC