如何计算给定数字在数据库中出现的平均次数?
id | ...
----------
1 | ...
5 | ...
2 | ...
3 | ...
3 | ...
1 | ...
6 | ...
4 | ...
3 | ...
...| ...
id
对应于用户的ID。也许该表用于客户订单或用户捐赠。对于上表:
id 1 = 2个条目
id 2 = 1 entry
id 3 = 3个条目
id 4 = 1 entry
id 5 = 1 entry
id 6 = 1条入口
平均值=(2 + 1 + 3 + 1 + 1 + 1)/ 6 =每个用户1.5个条目
每个用户的平均订单/捐赠数量为1.5,以举例说明。
我可以做类似下面的事情:
$getTotalEntries = $db->prepare("
SELECT *
FROM table
");
$getTotalEntries->execute();
$totalEntries = $getTotalEntries->rowCount();
$getGroupedEntries = $db->prepare("
SELECT *
FROM table
GROUP BY id
");
$getGroupedEntries->execute();
$groupedEntries = $getTotalEntries->rowCount();
$average = $totalEntries/$groupedEntries;
然而,我希望有一个SQL请求。顺便提一下,下面给出了给定id的出现次数,但我不能AVG()
。
$getAverageEntries = $db->prepare("
SELECT id, COUNT(*)
FROM table
GROUP BY id
"); // works, returns the 2,1,3,1,... from before
$getAverageEntries = $db->prepare("
SELECT AVG(COUNT(*))
FROM table
GROUP BY id
"); // won't find aggregate count
答案 0 :(得分:1)
select avg(countPerID) from (
select id, count(*) as countPerID from table group by id) x
答案 1 :(得分:1)
select avg(a.entryCount)
from (
select id, count(id) as entryCount
from <tablename>
group by id
) a;
答案 2 :(得分:1)
这个怎么样?
select count(id) / count(distinct id) as avgEntriesPerUser
from table t;
唯一的问题是NULL
的{{1}}值。如果发生这种情况(并且我发现名称为id
的列极不可能),那么上面会完全忽略这些行。可以对其进行修改以考虑这种情况。
答案 3 :(得分:1)
在SQL中,您需要进行计数才能获得条目数
select avg(entries) from(
Select Distinct Id.tableName, count(Id) As Entries
from tableName
group by ID)