【问题标题】:SQL Query count row of same id in a different tableSQL查询计数不同表中相同id的行
【发布时间】:2019-11-29 13:11:19
【问题描述】:

已经检查了其他答案,但不幸的是没有帮助我。所以我希望计算不同表中有多少相同的ID。这就是我的桌子的样子

左起第一个表是“resources”,第二个表是“equipment_entity”。所以我想计算与equipment_entity.id 结合时有多少resource_class_id。这是我迄今为止尝试过的,但没有奏效。任何帮助都可以。链接相同的问题或任何帮助。先谢谢了!

SELECT e.*, r.equipment_class_id, r.resource_type FROM equipment_entity as e LEFT JOIN resources as r ON e.id = r.equipment_class_id COUNT(DISTINCT r.equipment_class_id) where r.resource_type = 'equipment'

还有,我有这个错误

1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法 'COUNT(DISTINCT r.equipment_class_id) 附近,其中 r.resource_type = '设备' LIMIT 0' 在第 1 行

【问题讨论】:

  • 您能用您的数据样本设置一个小提琴,以便我(或其他人)可以使用它吗?
  • @hd1 好的先生等一下
  • sqlfiddle.com/#!9/f4062c/1 试试这个先生@hd1
  • 现在更新您的问题以显示您想要得到什么?
  • “所以我想计算加入设备实体.id 时有多少个resource_class_id”。我不太明白这意味着什么。此外,您的样本数据有resource_class,但您的查询引用resource_type。令人困惑。

标签: sql phpmyadmin mariadb


【解决方案1】:

所以我想计算加入设备实体.id时有多少个resource_class_id

我不太明白这意味着什么。下面有两种解释。

根据您的数据模型,表resources 似乎至少有两列idresource_class。表equipment_entity 似乎有resource_class_id。我已调整此答案以反映这些名称。

如果要统计具有特定资源类型的设备数量,则只需使用JOINCOUNT():

SELECT COUNT(*)
FROM equipment_entity  e JOIN
     resources r
     ON r.id = e.resource_class_id
WHERE r.resource_class = 'equipment';

既不需要COUNT(DISTINCT),也不需要LEFT JOIN

如果要统计所有个资源类,那么:

SELECT r.resource_class, COUNT(e.id)
FROM resources r JOIN
     equipment_entity e
     ON r.id = e.resource_class_id
GROUP BY r.resource_class;

【讨论】:

    【解决方案2】:

    有两种选择。您决定要知道 r.resource_type = 'equipment' 的计数,那么第一个查询将为您工作。

    SELECT COUNT(DISTINCT r.equipment_class_id)
    FROM equipment_entity AS e
         LEFT JOIN resources AS r ON e.id = r.equipment_class_id
    WHERE r.resource_type = 'equipment';
    

    但是,如果您想一次性查看所有 resource_type 的计数,您可以使用下面的 GROUP BY 来获得您想要的结果。

    SELECT r.equipment_class_id,
    COUNT(DISTINCT r.equipment_class_id)
    FROM equipment_entity AS e
         LEFT JOIN resources AS r ON e.id = r.equipment_class_id
    GROUP BY r.equipment_class_id;
    

    【讨论】:

    • 哦...取自您发布的查询 :) 搜索列“equipment_class_id”是否实际存在于表“resources”中!!
    • 它实际上是 resource_class_id。当我尝试它时确实改变了它,但没有得到我想要的结果。但仍然非常感谢! @user1309690 的查询是我期待的结果
    【解决方案3】:

    使用这个

    SELECT r.equipment_class_id, r.resource_type, count(r.equipment_class_id) count 
    FROM equipment_entity as e LEFT JOIN resources as r 
    ON e.id = r.equipment_class_id  where r.resource_type = 'equipment' GROUP BY equipment_class_id
    

    【讨论】:

      【解决方案4】:

      尝试以下查询。这将为您提供设备实体表中的所有行以及每个设备的资源表中的行数。

      SELECT e.*, count(*) AS count FROM `equipment_entity` AS e left join `resources` AS r ON e.id = r.equipment_class_id GROUP BY e.id
      

      【讨论】:

      • @Anthony.Jay 您能否接受正确的答案。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2017-01-29
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2018-11-28
      • 2021-10-27
      相关资源
      最近更新 更多