我有两张关于访问、客户和交易的桌子。我正在试图找到按Dogs (0-3)排序的事务总数。事务表为购买的每一项都有一行,因此多行可以用于一个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( Transaction.TransactionID)’中的语法错误(缺少操作符)。
我环顾四周,但似乎找不到解决办法。我认为问题的部分原因是我选择了两个属性。
如果有人能帮助解释该做什么和背后的逻辑,那就太好了!
发布于 2015-12-03 22:00:02
您应该使用一个已经独立的表(使用内部查询)连接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发布于 2015-12-03 22:09:36
您应该学会使用正确的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;https://stackoverflow.com/questions/34076914
复制相似问题