我在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)'。
我环顾四周,但似乎无法找到解决方案。我认为部分问题源于我选择两个属性的事实。
如果有人可以帮助解释该做什么以及背后的逻辑,那就太棒了!
答案 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;