gpt4 book ai didi

SQL 连接表给出错误结果

转载 作者:行者123 更新时间:2023-12-02 09:11:37 27 4
gpt4 key购买 nike

我正在执行此查询:

SELECT S.CompanyName,
COUNT(Visit.Id) AS visit_number,
COUNT(Client.Id) AS client_number,
FROM S
JOIN Visit ON S.Id = Visit.SnId
JOIN Client ON S.Id = Client.SId
WHERE Visit.StartedAt >= '2017.01.01' AND Visit.EndedAt< '2018.07.07'
GROUP BY S.CompanyName;

它给出的结果表如下:

company_name   visit_number   client_number
compnay_name_1 4 4
company_name_2 75 75

。。.

这些数字是错误的。当我在不连接表的情况下执行查询时,它给出了正确的结果,但与第一个查询的结果不同。我很确定我没有犯任何错误。我读了很多问题来证明我的查询是合理的,但我仍然找不到出路。错误在哪里?

SELECT S.CompanyName, COUNT(Visit.Id) AS visit_number
FROM S
JOIN Visit ON S.Id = Visit.SId
WHERE Visit.StartedAt >= '2017.01.01' AND Visit.EndedAt< '2018.07.07'
GROUP BY S.CompanyName;

此查询给出如下表:

company_name   visit_number   

compnay_name_1 3
company_name_2 54

这与第一个完全不同。我期望第一个查询在访问编号列中包含此结果。

最佳答案

您正在沿着两个独立的维度进行聚合。一种解决方案是使用count(distinct)。然而,这可能需要大量的计算。

推荐的替代方案通常是在加入之前进行聚合:

SELECT s.CompanyName, v.num_visits, c.num_clients
FROM s LEFT JOIN
(SELECT v.snid, COUNT(*) as num_visits
FROM Visit v
WHERE v.StartedAt >= '2017-01-01' AND v.EndedAt < '2018-07-07'
GROUP BY v.snid
) v
ON s.Id = v.SnId LEFT JOIN
(SELECT c.sid, COUNT(*) as num_clients
FROM Client c
GROUP BY c.snid
) v
ON s.Id = c.SId
GROUP BY s.CompanyName;

请注意,这使用LEFT JOIN,因此所有公司都会返回,即使它们没有访问或客户。

关于SQL 连接表给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51375432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com