【发布时间】:2019-02-01 14:16:06
【问题描述】:
我有 2 张桌子:
- 表 1:键、品牌、类型、欧洲、RefNr
- 表 2:密钥、所有者、地址、RefNr
两个表中的 RefNr 是唯一标识符,表 1 中的 European 是 True/False 字段。
我的问题是如何统计所有拥有欧洲汽车的车主?
【问题讨论】:
我有 2 张桌子:
两个表中的 RefNr 是唯一标识符,表 1 中的 European 是 True/False 字段。
我的问题是如何统计所有拥有欧洲汽车的车主?
【问题讨论】:
根据给出的信息,我会说您正在寻找具有简单 where 条件的连接?
select count(distinct t2.owner)
from table1 t1
join table2 t2 on t1.refnr = t2.refnr
where t1.european = true;
distinct t2.owner 是必要的,以防某人拥有多于一辆车。
【讨论】:
Sql Server 的解决方案如下:
Select count(t2.Owner) as EuropeanCarOwner
From Table1 t1
Inner join Table2 t2 on t2.RefNr = t1.RefNr
where t1.European = 1
请注意,欧洲列不是布尔类型而是 varchar,您可以在 while 子句中执行 t1.European = 'true'
如果一个人可以拥有多辆汽车并且每辆汽车都作为不同的记录输入,如果需要,每个车主只能计算一次:count(distinct t2.owner)
【讨论】:
并不是说你正在使用哪个 DBMS,这应该在 SSMS 中工作;
SELECT COUNT(*) AS EuroOwners
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.RefNr = t2.RefNr AND t1.European = 1
【讨论】:
INNER JOIN Table2 t2 ON t1.RefNr = t2.RefNr WHERE t1.European = TRUE