【问题标题】:count(distinct(col_name)) not working in my sql [duplicate]count(distinct(column_name))在mysql中不起作用[重复]
【发布时间】:2020-04-26 06:18:59
【问题描述】:

我是 mysql 的新手,为了学习,我正在使用 w3schools 的示例数据库。因为我想为每个供应商创建一个视图,列出供应商名称、供应商不同产品的数量(PCount)、供应商不同产品类别的数量(CCount)。

这是我的表结构

Suppliers                             Products
--------------------            ----------------------------
SupplierID                             ProductID
SupplierName                           ProductName  
ContactNumber                          SupplierID
Address                                CategoryID
City                                   Unit  
PostalCode                             Price
Country
Phone

我尝试的是

SELECT s.SupplierName, COUNT(DISTINCT(p.ProductID)) as PCount, COUNT(DISTINCT(p.CategoryID)) as CCount FROM Suppliers as s 
right join Products as p 
on s.SupplierID = p.SupplierID

这只是给我一个供应商名称,而不是所有具有不同产品和不同类别的供应商详细信息。

任何帮助将不胜感激。

【问题讨论】:

  • 你需要GROUP BY s.SupplierName
  • 副本使用不同的聚合函数(GROUP_CONCATCOUNT)但原理相同
  • @Nick 我没有收到你的最后评论。!你的意思是说我可以使用其中任何一个。?
  • 不,我的意思是重复中的查询没有给出预期结果的原因是由于缺少GROUP BY 子句,这与您的查询相同的原因没有给出预期的结果。

标签: mysql sql-server


【解决方案1】:

试一试:

SELECT s.SupplierName,
    COUNT(p1.ProductID) AS PCount,
    COUNT(DISTINCT p2.CategoryID) AS CCount
FROM Suppliers s
    LEFT JOIN Products p1 ON s.SupplierID=p1.SupplierID
    LEFT JOIN Products p2 ON s.SupplierID=p2.SupplierID
GROUP BY s.SupplierName
ORDER BY s.SupplierName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多