sql - 基于第三个表连接两个表(SQLite)
问题描述
我正在尝试使用三个不同的表格来获取美国所有麦当劳的列表,按 100 英里内的汉堡王数量排序。出于某种原因,我很难解决这个问题,我想知道是否有人可以就他们如何解决这样的问题提供任何建议?
我有一张包含所有麦当劳邮政编码的表格,一张包含汉堡王数量的所有邮政编码的表格,以及一张彼此相距 100 英里以内的所有邮政编码的表格。例如:
Mcdonalds
桌子:
姓名 | 压缩 |
---|---|
麦当劳公园露台 | 11121 |
麦当劳 HWY 103 | 11412 |
麦当劳克雷斯特伍德 | 11121 |
麦当劳彭德尔顿 | 26566 |
麦当劳史密斯维尔 | 67742 |
麦当劳 HWY 66 | 43351 |
BKzips
桌子:
压缩 | 编号BK |
---|---|
11121 | 2 |
11412 | 0 |
26566 | 6 |
43351 | 0 |
67742 | 3 |
... | ... |
zipproximity
桌子:
zip1 | zip2 | 之间的距离 |
---|---|---|
11121 | 11412 | 23.443 |
11121 | 26566 | 48.211 |
... | ... | ... |
11412 | 11121 | 23.443 |
我想要的最终结果是一个表格,每个麦当劳都有一行,列出了麦当劳 100 英里内的所有拉链及其 BK 总数。例如:
麦当劳 | 压缩 | zipsWithBKs | 总BKs |
---|---|---|---|
麦当劳公园露台 | 11121 | 26566, 11412 | 6 |
我已经能够使用内部连接来获得一个带有 BK 的每个 zip 一行的表:
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;
推荐阅读
- java - 如何在settings.xml的配置文件中使用maven插件
- c# - Runas 动词在特定的 Windows 10 机器上没有提升
- python - Pandas 添加一列依赖于字符串的浮点数
- node.js - 有没有办法在 MongoDB 中获取最后一个 USED/READ 文档?
- java - 从 Java 插入 MySQL 时 CPU 使用率高
- python - 多处理不会创建任何额外的进程
- ios - 从 iOS 应用上传 OneDrive Business 上的文件失败
- javascript - 在生产代码中记录缩小的 JavaScript 错误
- php - 它是什么代码以及如何在php中重写
- javascript - 在momentjs中将日期从给定格式转换为yyyy-mm-dd