具有两个表的独特计数

时间:2015-12-03 21:52:16

标签: sql count distinct

我在Access,Customer和Transaction上有两个表。我试图找到按狗(0-3)排序的交易总数。 Transaction表对于每个购买的商品都有一行,因此多行可以用于一个TransactionID。

这是我到目前为止所拥有的:

SELECT Customer.Dogs, COUNT(Transaction.TransactionID) AS TotTrans
FROM Transaction, Customer
WHERE Transaction.CustomerID = Customer.CustomerID
GROUP BY Dogs

我得到了

Dogs | TotTrans
0    | 130104
1    | 59132
2    | 17811
3    | 1401

显然,这会计算交易表中的总行数,并按狗数排序。但是,它计算交易表中的重复项(例如,有三行,其中TransactionID = 2,因为在该交易中,客户购买了3项。计数显然包括额外的2行)。

当我尝试COUNT(DISTINCT Transaction.TransactionID)时,它无法正常工作,并且消息

  

"查询表达式中的语法错误(缺少运算符)' COUNT(DISTINCT Transaction.TransactionID)'。

我环顾四周,但似乎无法找到解决方案。我认为部分问题源于我选择两个属性的事实。

如果有人可以帮助解释该做什么以及背后的逻辑,那就太棒了!

2 个答案:

答案 0 :(得分:2)

您应该使用已经不同的表(使用内部查询)

加入customer表
SELECT Customer.Dogs, COUNT(distinctTransactions.TransactionID) AS TotTrans
FROM (select distinct TransactionID,CustomerID from Transaction) as 
distinctTransactions, Customer
WHERE distinctTransactions.CustomerID = Customer.CustomerID
GROUP BY Dogs

答案 1 :(得分:1)

您应该学会使用正确的join语法。此外,表别名使查询更容易编写和阅读:

SELECT c.Dogs, COUNT(DISTINCT t.TransactionID) AS TotTrans
FROM Transaction t JOIN
     Customer c
     ON t.CustomerID = c.CustomerID
GROUP BY c.Dogs
ORDER BY c.Dogs;