内部联接不提供唯一值 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
它们。
我有 2 Tables :
Table 1:
想要加入表并获取 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
它们。