两个表的不同计数
Distinct Count with two tables
我有两个关于访问、客户和交易的 table。我正在尝试查找按 Dogs (0-3) 排序的交易总数。交易 table 每购买一件商品都有一行,因此多行可以对应一个交易 ID。
这是我目前的情况:
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
显然,这会计算事务中的总行数 Table 并按狗的数量对它们进行排序。但是,它正在计算交易中的重复项 Table(例如,TransactionID = 2 的三行,因为在该交易中客户购买了 3 件商品。计数显然包括额外的 2 行)。
当我尝试执行 COUNT(DISTINCT Transaction.TransactionID)
时它不起作用,消息
"Syntax error (missing operator) in query expression 'COUNT(DISTINCT Transaction.TransactionID)'.
我环顾四周,但似乎找不到解决方案。我认为部分问题源于我选择了两个属性。
如果有人能帮助解释该做什么及其背后的逻辑,那就太好了!
您应该使用已经不同的 table(使用内部查询)加入客户 table
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
您应该学会使用正确的 join
语法。此外,table 别名使查询更易于编写和阅读:
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;
我有两个关于访问、客户和交易的 table。我正在尝试查找按 Dogs (0-3) 排序的交易总数。交易 table 每购买一件商品都有一行,因此多行可以对应一个交易 ID。
这是我目前的情况:
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
显然,这会计算事务中的总行数 Table 并按狗的数量对它们进行排序。但是,它正在计算交易中的重复项 Table(例如,TransactionID = 2 的三行,因为在该交易中客户购买了 3 件商品。计数显然包括额外的 2 行)。
当我尝试执行 COUNT(DISTINCT Transaction.TransactionID)
时它不起作用,消息
"Syntax error (missing operator) in query expression 'COUNT(DISTINCT Transaction.TransactionID)'.
我环顾四周,但似乎找不到解决方案。我认为部分问题源于我选择了两个属性。
如果有人能帮助解释该做什么及其背后的逻辑,那就太好了!
您应该使用已经不同的 table(使用内部查询)加入客户 table
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
您应该学会使用正确的 join
语法。此外,table 别名使查询更易于编写和阅读:
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;