【问题标题】:How to count items with unique/distinct values but for the same group in SQL?如何计算具有唯一/不同值但在 SQL 中的同一组的项目?
【发布时间】:2018-06-28 10:05:44
【问题描述】:

我正在尝试“编写查询以列出 2018 年库存中至少有 2 种类型的所有 Fruit.Name。”

我有下面的代码打印出所有有 2 个或更多的项目。然而,这不是我想要的。例如,它正在打印 Orange、Apple、Kiwi。当实际结果应该只是 Apple 和 Kiwi 时。这是因为一种类型的橙子有两个。但是,我不在乎一种水果中是否有 2 个;我想要具有 2 种或更多不同类型的水果的结果,例如 Granny Smith Apples 和 Red Apples。我怎样才能让它只给出至少有 2 个不同 TypeID 的结果。

最终结果应该是 2018 年时间戳的主要水果(苹果)列表,并且有不同类型的水果(奶奶、红苹果、青苹果...)库存。

SELECT Fruit.Name
FROM Inventory
INNER JOIN Fruit
ON Inventory.ID = Fruit.ID
WHERE YEAR(Inventory.[Timestamp]) = 2018
GROUP BY Fruit.Name
HAVING COUNT(1) > 1

enter image description here

【问题讨论】:

  • 你能展示你的表格和行的样子吗? HAVING COUNT(DISTINCT Fruit.Name) > 1 怎么样?
  • @JohnWoo 我添加了一张带有表格图的图像。我也试过 HAVING COUNT(DISTINCT Fruit.NAME) > 1 但我收到错误消息说语法错误

标签: sql ms-access count distinct


【解决方案1】:

尝试COUNT(DISTINCT TypeID) 而不是COUNT(1)

SELECT Fruit.Name
FROM Inventory
INNER JOIN Fruit
ON Inventory.ID = Fruit.ID
WHERE YEAR(Inventory.[Timestamp]) = 2018
GROUP BY Fruit.Name
HAVING COUNT(DISTINCT TypeID) > 1;

【讨论】:

  • 我已经尝试过了,MS Access 总是给我一个“缺少操作员”的错误。
  • MS 访问?没找到你。
  • @Aaron 如果您在 MS Access 中运行 SQL,请用它标记问题。每个 RDBMS(如果你可以调用 MS Access 的话)都有自己的 SQL 实现。
  • @TT 刚刚用 ms-access 标记了它
  • COUNT(DISTINCT ...) 在 MS Access SQL 中不受支持。
【解决方案2】:

考虑使用SELECT DISTINCT 子查询,然后运行聚合COUNT

SELECT m.[Name]
FROM
   (SELECT DISTINCT f.[Name], i.TypeID
    FROM Inventory i
    INNER JOIN Fruit f
      ON i.FruitID = f.FruitID
    WHERE YEAR(i.[Timestamp]) = 2018
   ) m

GROUP BY m.[Name]
HAVING COUNT(*) > 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多