簡體   English   中英

SQL:內連接和計數不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM