SQL:如何根据多行的其他列进行计数

时间:2017-07-28 21:21:39

标签: sql ms-access

我是SQL和Microsoft Access的相对新手,我想知道是否有人可以帮助我解决我一直遇到的问题。

我有一个包含不同零件编号的不同零件的数据库,我想找到每个零件最常购买的单价。以下是我的数据库格式的示例,其中显示了购买部件的次数:

零件编号|单价|

  • 3XG-32Q | $ 0.24 |
  • 3XG-32Q | $ 0.26 |
  • 3XG-32Q | $ 0.26 |
  • E7Y-FG8 | $ 0.24 |
  • E7Y-FG8 | $ 0.38 |
  • E7Y-FG8 | $ 0.24 |

......等等。这是我迄今为止使用的代码,不是为了找到每个零件最常购买的价格,而是试图找出每个零件在每个价格下购买了多少次:

SELECT Database.PartNumber, Database.UnitPrice, COUNT(Database.UnitPrice) as Number_Of_Orders
FROM Database
GROUP BY Database.PartNumber, Database.UnitPrice
ORDER BY Database.PartNumber;

我无法解决的问题是,每个价格的出现金额都在整个表格中计算,而不是在一个零件编号的范围内。这个代码将在每个出现的价格$ 0.24旁边的Number_Of_Orders列中给出值3,即使我希望该值为1,所以我可以将它与3XG-32Q部分的购买次数进行比较,为0.26美元并确定0.26美元是该部件最常订购的价格。

如何更改我的计数功能,或在代码中添加其他方面,只计算每个价格在单个部分的上下文中出现的次数?

2 个答案:

答案 0 :(得分:0)

计数将按每个值分组。如果没有,还会发生其他事情:

SELECT 
    Database.PartNumber, 
    Database.UnitPrice, 
    COUNT(*) AS Number_Of_Orders
FROM 
    Database
GROUP BY 
    Database.PartNumber, 
    Database.UnitPrice
ORDER BY 
    Database.PartNumber,
    COUNT(*) Desc;

答案 1 :(得分:0)

这在MS Access中有点痛苦。您需要SELECT d.PartNumber, d.UnitPrice, COUNT(d.UnitPrice) as Number_Of_Orders FROM Database as d GROUP BY d.PartNumber, d.UnitPrice HAVING Number_Of_Orders = (SELECT MAX(d3.Number_Of_Orders) FROM (SELECT COUNT(*) as Number_Of_Orders FROM Database as d2 WHERE d2.PartNumber = d.PartNumber GROUP BY d2.UnitPrice ) as d3 ) ORDER BY d.PartNumber; 子句:

ion-item