【问题标题】:My usage of SQL COUNT not working as I expect我对 SQL COUNT 的使用没有按预期工作
【发布时间】:2021-02-18 14:00:52
【问题描述】:

假设我们有以下表格

  • 所有者(OwnerID, BasketID)
  • 篮子(篮子 ID,描述)
  • 项目(ItemID、BaskedID、名称)

现在我想查询所有现有所有者篮子的信息,因此行包含: OwnerID、TotalNumberOfBaskets、TotalNumberOfItems

选择所有者 ID, 计数(篮子。篮子 ID), 计数(项目。项目 ID) 来自所有者 左加入篮子使用(篮子ID) LEFT JOIN Item USING (ItemID);

这绝对行不通,因为我总是得到相同的篮子和项目计数,而篮子可以包含超过 1 个项目。 任何想法或提示,(COUNT) 的正确用法应该是什么才能获得所需的结果?

非常感谢,如果这是一个非常琐碎的问题,我们深表歉意。

【问题讨论】:

  • 请添加 GROUP BY OwnerID

标签: sql count mariadb


【解决方案1】:

您需要GROUP BYCOUNT(DISTINCT)

SELECT o.OwnerID, COUNT(DISTINCT b.BasketID), COUNT(i.ItemID)
FROM Owner o LEFT JOIN
     Basket b
     USING (BasketID) LEFT JOIN
     Item i
     USING (ItemID)
GROUP BY o.OwnerID;

【讨论】:

    【解决方案2】:

    BasketID 和 ItemID 的计数相同,因为 BasketID 对 Basket 表中的每个 itemID 都是重复的。

    您应该使用 DISTINCT 来获取 BasketID 计数,这样就不会考虑重复的 BasketID。

    SELECT OwnerID, COUNT(DISTINCT Basket.BasketID), COUNT(Item.ItemID) FROM Owner LEFT JOIN Basket USING (BasketID) LEFT JOIN Item USING (ItemID);

    【讨论】:

    • 非常感谢!真的需要一个 DISCTICT
    猜你喜欢
    • 2015-11-17
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多