基于第三个Table连接两个表(SQLite)
Joining Two tables Based on Third Table (SQLite)
我正在尝试使用三个不同的 table 来获取美国所有麦当劳的列表,按 100 英里内的汉堡王数量排序。出于某种原因,我真的很难解决这个问题,我想知道是否有人可以就如何解决这样的问题提供任何建议?
我有所有麦当劳的 table 及其邮政编码,所有邮政编码的 table 和汉堡王的数量,以及 100 以内的所有邮政编码的 table彼此相距数英里。例如:
Mcdonalds
table:
NAME
zip
McDonalds Park Terrace
11121
McDonalds HWY 103
11412
McDonalds Crestwood
11121
McDonalds Pendleton
26566
McDonalds Smithville
67742
McDonalds HWY 66
43351
BKzips
table:
zip
numberBKs
11121
2
11412
0
26566
6
43351
0
67742
3
...
...
zipproximity
table:
zip1
zip2
distancebetween
11121
11412
23.443
11121
26566
48.211
...
...
...
11412
11121
23.443
我想要的最终结果是 table 每个麦当劳都有一行,列出该麦当劳 100 英里范围内的所有邮编及其 BK 总数。例如:
McDonalds
zip
zipsWithBKs
totalBKs
McDonalds Park Terrace
11121
26566, 11412
6
我已经能够使用内部联接获得一个 table 每个 zip 一行和 BKs:
SELECT McDonalds.NAME, BKzips.zip, BKzips.numberBKs
FROM zipproximity
INNER JOIN McDonalds
ON zipproximity.zip1 = McDonalds.zip
INNER JOIN BKzips
ON zipproximity.zip2 = BKzips.zip
但我不知道如何获得我想要的结果。在没有 SQL 的经验和解决这个问题几个小时之间,我很困惑。感谢您的帮助!
差不多了,只是 GROUP BY
和一些聚合函数:
SELECT McDonalds.NAME, McDonalds.zip, GROUP_CONCAT(BKzips.zip, ', ') AS zipsWithBKs, SUM(BKzips.numberBKs) AS totalBKs
FROM zipproximity
INNER JOIN McDonalds
ON zipproximity.zip1 = McDonalds.zip
INNER JOIN BKzips
ON zipproximity.zip2 = BKzips.zip
-- WHERE BKzips.numberBKs > 0 -- you probably want this also
GROUP BY McDonalds.NAME, McDonalds.zip;
我正在尝试使用三个不同的 table 来获取美国所有麦当劳的列表,按 100 英里内的汉堡王数量排序。出于某种原因,我真的很难解决这个问题,我想知道是否有人可以就如何解决这样的问题提供任何建议?
我有所有麦当劳的 table 及其邮政编码,所有邮政编码的 table 和汉堡王的数量,以及 100 以内的所有邮政编码的 table彼此相距数英里。例如:
Mcdonalds
table:
NAME | zip |
---|---|
McDonalds Park Terrace | 11121 |
McDonalds HWY 103 | 11412 |
McDonalds Crestwood | 11121 |
McDonalds Pendleton | 26566 |
McDonalds Smithville | 67742 |
McDonalds HWY 66 | 43351 |
BKzips
table:
zip | numberBKs |
---|---|
11121 | 2 |
11412 | 0 |
26566 | 6 |
43351 | 0 |
67742 | 3 |
... | ... |
zipproximity
table:
zip1 | zip2 | distancebetween |
---|---|---|
11121 | 11412 | 23.443 |
11121 | 26566 | 48.211 |
... | ... | ... |
11412 | 11121 | 23.443 |
我想要的最终结果是 table 每个麦当劳都有一行,列出该麦当劳 100 英里范围内的所有邮编及其 BK 总数。例如:
McDonalds | zip | zipsWithBKs | totalBKs |
---|---|---|---|
McDonalds Park Terrace | 11121 | 26566, 11412 | 6 |
我已经能够使用内部联接获得一个 table 每个 zip 一行和 BKs:
SELECT McDonalds.NAME, BKzips.zip, BKzips.numberBKs
FROM zipproximity
INNER JOIN McDonalds
ON zipproximity.zip1 = McDonalds.zip
INNER JOIN BKzips
ON zipproximity.zip2 = BKzips.zip
但我不知道如何获得我想要的结果。在没有 SQL 的经验和解决这个问题几个小时之间,我很困惑。感谢您的帮助!
差不多了,只是 GROUP BY
和一些聚合函数:
SELECT McDonalds.NAME, McDonalds.zip, GROUP_CONCAT(BKzips.zip, ', ') AS zipsWithBKs, SUM(BKzips.numberBKs) AS totalBKs
FROM zipproximity
INNER JOIN McDonalds
ON zipproximity.zip1 = McDonalds.zip
INNER JOIN BKzips
ON zipproximity.zip2 = BKzips.zip
-- WHERE BKzips.numberBKs > 0 -- you probably want this also
GROUP BY McDonalds.NAME, McDonalds.zip;