【问题标题】:Getting and calculating data from 3 unrelated mysql tables从 3 个不相关的 mysql 表中获取和计算数据
【发布时间】:2011-03-25 13:22:34
【问题描述】:

我正在努力解决(看起来很简单)的简单解决方案,但无法让它发挥作用。

我需要从 3 个不同的表中获取信息。它们可以与 id 列相关。我想做的是:

  1. 查看id在table1中出现的次数,SUM()对应table1.data字段的所有值作为sum1

  2. 查看id在table2中出现的次数,SUM()对应table2.data字段的所有值作为sum2

  3. 查看id在table3中出现的次数,SUM()对应table3.data字段的所有值作为sum3

我可以使用 3 个不同的查询来解决这个问题,但我真的很想用一个 MySQL 查询来返回结果。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    好吧,我认为一个查询的想法绝对是可能的。试试这样的:

    select c1.id
         , sum(c1.val) as sum1, count(distinct(c1.id)) as cnt1
         , sum(c2.val) as sum2, count(distinct(c2.id)) as cnt2
         , sum(c3.val) as sum3, count(distinct(c3.id)) as cnt3
    from c1, c2, c3
    where c1.id = c2.id
    and c2.id = c3.id
    group by id
    

    如果您的数据未完全填充到所有表中,您可能需要外连接。

    【讨论】:

    • 这几乎与我放在一起的查询相同 - 问题是它只返回所有三个表中都存在的 id 值。它不会对仅存在于一个或两个表中的 id 值求和。它还会在每次找到匹配项时将每个总和相乘。
    【解决方案2】:

    Guy 是对的,您想要实现的目标实际上无法通过一个查询来实现。您将需要查看在不同 ID 上使用计数函数,例如

    从 t1 中选择 COUNT(DISTINCT t1.[ID]) 从 t2 中选择计数(DISTINCT t2.[ID]) 从 t3 中选择计数(DISTINCT t3.[ID])

    等等

    【讨论】:

      【解决方案3】:

      将所有这些查询合二为一是没有任何意义的:

      1. 数据与 彼此
      2. 任何可能的方法 仍将包含 3 个查询;这 唯一的问题是你 将其中两个表示为 第一个查询的子查询,或 分别调用每个查询。

      【讨论】:

      • 即使您将一些 SELECT 语句表示为子查询,它们仍然都包含在一个“查询”中。这通常是一项要求,而不是“我的查询中不能有多个 SELECT 关键字”。
      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多