繁体   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