【问题标题】:COUNT from two different tables来自两个不同表的 COUNT
【发布时间】:2014-02-01 05:18:14
【问题描述】:

这是一个时髦的问题,我知道这一点。也许这都是因为我真的很累。

现在,不要责怪设计 - 它有缺陷,但我无能为力,好吗?

  • 两个表,由一个 id 字段链接。
  • 第一个表包含仓库中的职位(表 P)
  • 第二个表包含存储在仓库中每个位置的物品(表 PA)
  • 所有 仓库中的位置都存在于 P 表中(> 5000 条记录)
  • 每个位置可以包含不止一篇文章
  • PA 表中不存在 P 表中的位置

positionarticles 的计数加上 positionarticles 中的位置。

真的没有比这种完全愚蠢更好的方法了吗?:

SELECT SUM(row)
FROM
(
  SELECT COUNT(*) row
  FROM PA
  UNION
  SELECT COUNT(*)
  FROM P
  WHERE ID NOT IN
    (
      SELECT P_ID
      FROM PA
    )
) as rowcounter

样本数据

表 P:

ID   Name
1    A01
2    A03
3    B01  *
4    B02  *

表 PA:

ID   P_ID   A_ID
1    1      201  *
2    1      202  *
3    1      203  *
4    2      205  *

返回的计数是 6 => 来自 PA 的 4 行 + 2 行(PA 中不存在 P_ID)。计数的行带有星号 (*)。

【问题讨论】:

  • 你能用样本数据和预期结果澄清你的问题吗?你说“我想计算所有职位和职位文章”。我希望您的查询会返回两个计数。
  • 澄清了我的问题,添加了示例数据和预期结果。这个问题仍然有点模糊,但应该从样本数据的模糊中清楚。谢谢。
  • 草莓:这不太礼貌。我已经尝试了数十亿(不完全是,但你知道,很多)版本的 JOIN,唯一正确的结果是 q 中那个丑陋的东西。我很想用正常的 LEFT 或 FULL 或 INNER 或 CROSS 来完成这项工作,但我失败了,因此我在这里发帖。
  • 我改变了我的方法,和以前一样多次;不是解决问题而是规避问题。

标签: mysql sql select count group-by


【解决方案1】:

试试这个:

SELECT P.ID, COUNT(PA.ID) noOfArticles
FROM P 
LEFT JOIN PA ON P.ID = PA.P_ID 
GROUP BY P.ID

【讨论】:

  • 不,这会返回每个位置的文章数,即返回许多行(位置)
猜你喜欢
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多