php – 如何计算涉及多个表的多个列的平均值和计数?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何计算涉及多个表的多个列的平均值和计数?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我不同的表格:

computers (id,name)
monITors (id,name)
computer_monitor (id,computer_id,monitor_id)
useractivity (id,userid,timestamp,computer_monitor_id,ip)
useropinion (id,rating)
user (id,name,email)

我想搜索计算机或监视器的名称,并得到这样的行作为回报:

computer name and/or monitor name
computer_monitor_id
avg(rate)
count(useractivity)

avg(rate)位于与名称匹配的特定computer_monitor_id上,计数相同.

没有连接到监视器的计算机在computer_monitor表中的监视器字段上的值为0,反之亦然,用于监视器 – >计算机.

useractivity和useropinion仅包含computer_monitor表中的ID

解决方法

据我所知,查询应该围绕computer_monitor表构建.所有其他表连接到它,包括您要从中获取统计信息的表.

SELECT
  c.name AS ComputerName,m.name AS MonitorName,uo.Averagerating,ua.ActivityCount
From computer_monitor cm
  LEFT JOIN computer c ON c.id = cm.COMputer
  LEFT JOIN monitor  m ON m.id = cm.monitor

  INNER JOIN (
    SELECT computer_monitor_id,AVG(rating) AS Averagerating
    From useropinion
    group by computer_monitor_id
  ) uo ON cm.id = uo.computer_monitor_id

  INNER JOIN (
    SELECT computer_monitor_id,COUNT(*) AS ActivityCount
    FROM useractivity
    GROUP BY computer_monitor_id
  ) ua ON cm.id = ua.computer_monitor_id

实际上,正如您所看到的,首先聚合使用和使用,然后加入.这是为了避免当computer_monitor.id在useropinion和useractivity中匹配多行时的Cartesian product效果.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何计算涉及多个表的多个列的平均值和计数?全部内容,希望文章能够帮你解决php – 如何计算涉及多个表的多个列的平均值和计数?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。