内部联接不提供唯一值 mysql

Inner Join not giving unique values mysql

我有 2 Tables :

Table 1: Table 2:

想要加入表并获取 timetaken 和 duration 字段的总和。 尝试的查询是:

select distinct 
  table1.city , 
  FORMAT(SUM(time_to_sec(table1.timetaken))/3600,2) as TT, 
  count(table1.city) as C1, 
  FORMAT(SUM(time_to_sec(table2.duartion))/3600 ,2) as D, 
  count(table2.city) as C2
from table1
inner join table2 on table1.city= table2.city  
group by city;

但得到的输出如下:

但预期的输出是:

如果 Inner Join 不是正确的做法,有人可以纠正我以获得预期的输出吗? 非常感谢。!!!

我觉得 distinct、sum、group 和 joins 的组合有点太多了。我还没有测试过,但看起来你不会得到你期望的所有行。它可能已经通过删除 distinct 关键字来解决(由于总和和你的组基本上已经有了独特的城市)。否则,您可以尝试使用子查询首先对两个表中的不同城市求和,然后将这两个子查询连接在一起。

您有 3 行城市 ABC 在 table 1 和 2 行 ABC 在 table2 中。因此,当然,这两者的内部连接将有 6 行(table1 中的每个 ABC 与 table2 中的每个 ABC 连接)与 [=15 相同=]

从你的考试数据来看,我想你想要这样的东西(即分别分组每个 table 然后加入结果)

with 
  g1(city, tt, c1) 
  as (select city, sum(time_to_sec(timetaken)), count(*) from table1 group by city),
  g2(city, dur, c2) 
  as (select city, sum(time_to_sec(duration)), count(*) from table2 group by city)

select g1.city, format(tt / 3600, 2), c1 , format(dur / 3600, 2), c2
from g1 inner join g2 on g1.city = g2.city

查询是从头顶开始的,因此可能存在一些语法问题,但您应该明白了。

你可以这样做:

SELECT *
FROM (SELECT city , 
             FORMAT(SUM(TIME_TO_SEC(timetaken))/3600,2) AS TT, 
             COUNT(city) AS C1 
        FROM table1 GROUP BY city) AS T1
INNER JOIN 
   (SELECT city,
           FORMAT(SUM(TIME_TO_SEC(Duration))/3600 ,2) AS D, 
           COUNT(city) AS C2 FROM table2 GROUP BY city) AS T2 
ON T1.city= T2.city;

对每个 table 执行计算,然后将它们作为子查询。之后您可以在外部查询中 INNER JOIN 它们。