【问题标题】:Count multiple tables giving me same result计算多个表给我相同的结果
【发布时间】:2013-03-24 21:35:46
【问题描述】:

我有两张桌子,想计算两张桌子上的身份证号码。一张表只有一个结果,但另一张表可能有更多。

select 
a.ID,
count(a.ID),
count(b.ID)
from a

join b on
(b.ID=a.ID)

where a.ID='7820193'
group by a.ID

结果如下所示 ID 7820193 计数 (a.ID)=200 计数(b.ID)=200

但是,该 ID 号在一个实例中只有一个实例 我尝试过所有类型的连接(左、右、内) 我做错了什么?

【问题讨论】:

  • 你到底想在这里做什么? mysql count函数用于统计select语句生成的记录总数。
  • 我想知道每个表中ID的次数。在这种情况下,它在 a 中出现一次,在 b 中出现 200 次。出于某种原因,我每张桌子的总数都相同。
  • 在没有 count 函数的情况下运行你的 select 语句,然后看看那里发生了什么。
  • 我已经验证,如果我检查该 ID,则只有一个。如果我检查 b 的那个 ID 有 200。

标签: mysql sql join count


【解决方案1】:

这应该会给你预期的结果,试一试:)

SELECT 
    z.id,
    count(a.id) as count_ID_from_Table_A,
    count(b.id) as count_ID_from_Table_B
FROM
   (SELECT ID FROM table1
    UNION
    SELECT ID FROM table2) z
LEFT JOIN 
    table1 a ON z.id=a.id
LEFT JOIN 
    table2 b ON z.id=b.id
GROUP BY 
    z.id

【讨论】:

    【解决方案2】:

    试试看。

    SELECT a.ID, COUNT(a.ID) counta, (SELECT COUNT(b.ID) FROM b WHERE b.ID = a.ID  GROUP BY b.ID) AS countb
    FROM a 
    WHERE a.ID='7820193' GROUP BY a.ID
    

    【讨论】:

      【解决方案3】:
      select 
          a.id, 
          count(a.id),
          b.id,
          count(b.id)
      from a,b 
      where a.id = b.id and a.id = ''7820193'
      group by 
          a.id,
          b.id;
      

      【讨论】:

      • 运行这个查询。它将从两个表中计算出来。
      【解决方案4】:

      这应该可以解决问题:

      SELECT
        Derived.id,
        COUNT(*),
        Derived.count
      
      FROM(
        SELECT
          id,
          COUNT(*) AS count
      
        FROM a
      
        WHERE id = 7820193
      ) AS Derived
      
      JOIN b AS b ON b.id = Derived.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 2017-10-06
        • 1970-01-01
        • 2012-11-15
        • 2023-02-07
        • 1970-01-01
        相关资源
        最近更新 更多