[英]SQL: inner join and count distinct
我有以下格式的兩個表
Users:
UserID Name State
100 ABC Active
200 DEF Active
300 GHI Inactive
Transactions:
UserID TransactionDate TransactionType Amount
100 2020-01-01 Gas 100
100 2020-01-01 Grocery 50
100 2020-05-01 Grocery 20
200 2020-01-01 Gas 50
200 2020-01-01 Gas 15
300 2020-05-01 Grocery 20
我想得到如下結果:
TransactionType Count
Gas 3
Grocery 2
本質上,我只想從Users
表中選擇Active
的用戶,並為這些用戶計算Transactions
表中發生的事務數。 我是一個 sql 新手,並嘗試了一些連接和計數,但沒有成功,知道如何讓它工作嗎? 謝謝!
您可以使用以下查詢返回您想要的結果:
SELECT
TransactionType,COUNT(TransactionType) as Count_
FROM
Transactions
WERE
UserID IN (SELECT UserID FROM Users WHERE State = 'Active')
GROUP BY TransactionType
你當然可以把它寫成一個連接。 但是當你想計算所有行時,這里沒有使用count(distinct ...)
。
SELECT TransactionType, COUNT(*) as "Count"
FROM Transactions t inner join Users u
ON u.UserID = t.UserID and u.State = 'Active'
GROUP BY TransactionType;
由於這是一個內部連接,您也可以將額外的過濾器移動到where
子句中以獲得相同的效果:
SELECT TransactionType, COUNT(*) as "Count"
FROM Transactions t inner join Users u
ON u.UserID = t.UserID
WHERE u.State = 'Active'
GROUP BY TransactionType;
一旦你進入外部連接,這些將不再是等價的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.