有人问我这个问题:
有多少客户在其所在城市以外的城市进行交易?您需要找到每个客户的主分行位置并将其与他们的交易位置(即交易城市)进行比较。
我有 3 张桌子,一张用于
branchdata
,有两列,branchnumber
和 location
Customerdata
与 customerid
、name
、age
、city
、homebranch
、accountbalance
transactiondata
与 transactionid
、transactionamount
、transactioncity
、customerid
、accountnumber
。
我无法加入
customerdata
和 transactiondata
表以查看 customerid
、transactioncity
和 homebranch
。
任何有关从哪里开始的帮助将不胜感激。
我已经尝试过这两个查询
select customerid, city, homebranch
from customerdata
select Transactioncity, customerid
from transactiondata
我可以通过分别查看这两个来获得答案,但我假设这一切都应该在一个查询中完成。
FROM customerdata c
JOIN transactiondata t ON c.customerid = t.customerid
JOIN branchdata b ON c.homebranch = b.branchnumber
WHERE t.transactioncity <> b.location
SELECT COUNT(DISTINCT c.customerid) AS num_customers
将上面的所有内容都包裹起来:
SELECT COUNT(DISTINCT c.customerid) AS num_customers
FROM customerdata c
JOIN transactiondata t ON c.customerid = t.customerid
JOIN branchdata b ON c.homebranch = b.branchnumber
WHERE t.transactioncity <> b.location;
正如上面的 Luty 所示,要解决这个问题,你需要 JOIN 表 所以我们打电话吧 客户-c 交易-t 分支 - b (但据我了解,此任务不需要分支)
此时我们可以进行选择
SELECT COUNT(*)
FROM customerdata AS c
JOIN transactiondata AS t ON c.customerid = t.customerid
WHERE c.city != t.transactioncity
让我们分解查询 我们
SELECT COUNT(*)
选择与我们的 WHERE c.city != t.transaction
正确的行数,因此我们检查 c - 客户城市是否与 t - 交易城市不同,如果它们 !=
不相同,则将被计数
FROM customerdata
意味着我们主要访问 customerdata 表的数据,但由于我们需要超过 1 个具有相似字段的表来识别它们,因此我们需要为每个表命名一个别名,例如将它们的名称缩写为 1 个字母,如“c”
我们用 AS c
来做到这一点
与您的查询相比,我添加了
JOIN transactiondata AS t ON c.customerid = t.customerid
,这意味着我们将添加表transactiondata中的所有字段to our customerdata but as before we need to name it to recognize witch table we access to we adds
AS t after this we need to clarify which data from transactiondata matches customerdata so we add statement
c.customerid = t.customerid``
但目前我们只
COUNT(*)
所有在其他城市然后客户在家进行的交易
因此,为了只计算每个客户一次,我们必须通过调用
DISTINCT
到我们想要唯一的字段来使其唯一
所以我们最终得到这样的查询
SELECT COUNT(DISTINCT c.customerid)
FROM customerdata AS c
JOIN transactiondata AS t ON c.customerid = t.customerid
WHERE c.city != t.transactioncity