查找值

时间:2015-05-12 14:35:43

标签: sql pdo

如何计算给定数字在数据库中出现的平均次数?

 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

4 个答案:

答案 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)