【问题标题】:mySQL AVG - A way to merge two results for AVGmySQL AVG - 一种为 AVG 合并两个结果的方法
【发布时间】:2011-04-01 14:36:18
【问题描述】:

我正在尝试获取我的指标的平均交互次数,但是此查询获取那些进行交互的人的平均交互次数(那些在 metricsActions 中的人只有在他们已经交互时才存在,他们的 metricsID 仍然存在于 @ 987654321@表)。

所以,我想知道如何获得所有这些用户的平均值。我可以做两个查询,但是我将如何平均两个结果呢?可以合并吗?

SELECT AVG(`instances`) FROM (SELECT m.`metricID`, COUNT(mc.`metricAction`) as `instances` FROM `metricActions` mc LEFT JOIN `metrics` m ON m.`metricID` = mc.`metricID` WHERE m.`clientID` = '10412' AND `type` = '2' AND GROUP BY mc.`metricID` ORDER BY `instances` DESC ) as `temp`

【问题讨论】:

  • 能否请您发布表格结构?
  • 任何关于你想要什么格式的结构的链接示例,这样我就不会垃圾邮件?
  • 复制SHOW CREATE TABLE tablename的输出(每个表)并粘贴到这里。

标签: php mysql average


【解决方案1】:

您应该反过来使用LEFT JOIN

SELECT  AVG(`instances`)
FROM    (
        SELECT  m.`metricID`, COUNT(mc.`metricAction`) as `instances`
        FROM   `metrics` m
        LEFT JOIN
                `metricActions` mc
        ON      mc.`metricID` = m.`metricID`
                AND mc.`type` = '2'
        WHERE   m.`clientID` = '10412'
        GROUP BY
                m.`metricID`
        ) as `temp`

【讨论】:

  • 这提供了相同的结果。问题是,如果有活动,metricActions 只有一个条目(其中可能有多个条目/行),而具有 0 个条目但仍存在于指标中的用户未包含在查询中。跨度>
  • 也许在加入条件的情况下上移@98​​7654323@?
  • @Ronnis:这取决于它属于哪个表。我想它来自metric 并且@op 想要过滤它。
  • 是的,我们不知道,因为他没有使用别名。他关于它返回“相同结果”的评论让我认为该列可能来自 metricActions。在这种情况下,TYPE 上的过滤器会将连接变成内部连接。
  • @Ronnis:看来你可能是对的。出于某种原因,我完全错过了@op 的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多