我有一张包含大量记录的表格,我试图找到每个号码平均时间最长的10个号码。
因此表格可能如此:
number | time
012345 | 10s
012345 | 20s
055555 | 50s
055555 | 30s
068976 | 11s
etc...
,输出应如下所示:
number | time
012345 | 15s
055555 | 40s
068976 | 11s
尝试了这个但无济于事
select distinct(destination), avg(totalqueuetime)
from call
group by destination, totalqueuetime
order by totalqueue time desc limit 10;
它似乎没有对数字进行分组。
答案 0 :(得分:1)
您的group by
有两把钥匙。它应该只有一个:
select destination, avg(totalqueuetime)
from call
group by destination
order by totalqueue time desc
limit 10;
关于使用distinct
的说明。 select distinct
几乎不需要group by
。事实上,在几乎所有情况下,您根本不需要select distinct
- 因为您可以使用group by
。
此外,distinct
不是一个功能。它适用于整个行。所以,除非你想让自己迷惑,否则不要在第一栏附近使用括号。
答案 1 :(得分:1)
请尝试以下代码,经过测试已确认有效。 ...-
(如果您希望按平均总排队时间排序,如上面的代码示例所示)
SELECT destination,
AVG( totalqueuetime ) AS avgTQT
FROM call
GROUP BY destination
ORDER BY avgTQT DESC LIMIT 10;
(如果您希望按目的地排序,如上面所需的输出样本所示)
SELECT destination,
AVG( totalqueuetime ) AS avgTQT
FROM call
GROUP BY destination
ORDER BY destination DESC LIMIT 10;
如果您有任何问题或意见,请随时发表评论。
注意:对于您提供的代码,如果从GROUP BY子句中删除totalqueuetime,则不需要使用DISTINCT。感谢AVG,SELECT语句会将平均值放在每个返回的字段中,这可能会导致描述和平均值相同组合的许多实例。按目的地对它们进行分组会将列表缩减为仅包含每个组合的一个实例。