sqlite 使用WITH和UNION计算两张表的航班数和天气情况

drkbr07n  于 2023-02-16  发布在  SQLite
关注(0)|答案(1)|浏览(138)

表A
| 日期|飞行|机场|
| - ------|- ------|- ------|
| 2012年10月1日|单向|ATL、GA|
| 2012年10月1日|单向|加利福尼亚州洛杉矶|
| 2012年10月2日|单向|SAN、加利福尼亚州|
| 2012年10月2日|单向|DTW,密歇根州|
| 2012年10月3日|圆形|加利福尼亚州SFO|
| 2012年10月4日|圆形|加利福尼亚州SFO|
| 2012年10月5日|圆形|加利福尼亚州SFO|
表B
| 日期|温度|沉淀|
| - ------|- ------|- ------|
| 2012年10月1日|二十七|0.02分|
| 2012年10月2日|三十五|0.00美元|
| 2012年10月3日|六十六|0.18|
| 2012年10月4日|五十七|0.00美元|
| 2012年10月5日|七十八|0.24|
表A具有大约100k行,而表B仅具有大约60行
我正试图查询,以找到航班总数在寒冷的日子和温暖的日子,以及跟踪的天数,无论是寒冷或温暖。
当表B中的温度低于(〈)40时定义为冷天,否则定义为温暖。
在实际数据中,我有10天的总天数与日期匹配,因此我需要在聚合时计数。我试图在不使用CTE的情况下获得总计数,但我总是得到错误的计数。
预期成果
| 天数|航班数|天数|
| - ------|- ------|- ------|
| 冷天|四个|第二章|
| 暖日|三个|三个|

w7t8yxp5

w7t8yxp51#

您需要TableBTableALEFT连接,以及返回'cold''warm'CASE表达式结果的聚合:

SELECT CASE WHEN b.temp < 40 THEN 'cold day' ELSE 'warm day' END Days,
       COUNT(*) Num_of_flight,
       COUNT(DISTINCT a.date) Num_of_days
FROM TableB b LEFT JOIN TableA a
ON a.date = b.date
GROUP BY Days;

请参见demo

相关问题