SQL 关系数据库:数据操作和计算
SQL relational database: Data manipulation and calculations
我有两个 table。一个是包含所有酒店预订数据的 Booking_Platform table。第二个是 Customer_Country_Table,它存储每个通过该平台预订酒店的客户的来源信息。
我要计算一下从 2017 年到 2018 年哪个国家的预订量增幅最大。
下面给出一些示例数据供参考:
Booking_Platform_Info
Booking_Date column2 column3.... column N ....... Origin_Country_ID
20-dec-2016 .................................... 103
03-jan-2017 .................................... 101
09-feb-2017 .................................... 103
23-apr-2017 .................................... 102
06-oct-2017 .................................... 102
11-nov-2017 .................................... 103
05-jan-2018 .................................... 102
21-jan-2018 .................................... 102
26-feb-2018 .................................... 101
09-mar-2018 .................................... 101
11-may-2018 .................................... 103
10-sep-2018 .................................... 102
20-nov-2018 .................................... 101
07-dec-2018 .................................... 101
23-dec-2018 .................................... 101
31-dec-2018 .................................... 103
23-jan-2019 .................................... 103
Customer_Country_Info
Country_ID Country_Name
101 Italy
102 Spain
103 Portugal
这对我来说有点复杂,据我所知,我必须先加入 tables,然后按国家分组,然后统计总数。按年份的预订(可能是另一个分组依据);然后比较结果,看看哪个国家/地区在 2017-2018 年的预订方面具有最大的正差异。我欢迎任何有关编码此问题的帮助。
在我的示例中,国家 101 意大利将是答案,因为 2018 年和 2017 年的预订差异最大 (5-1=4)
*********评论后编辑
我正在编写两个查询以按国家/地区 ID 获取 2017 年和 2018 年的预订总数
SELECT CAST(booking_date AS DATE), COUNT(*) as number_of_bookings, origin_country_id FROM Booking_Platform_Info
WHERE booking_date >= '2017-01-01' AND
booking_date < '2017-01-01'
GROUP BY origin_country_id;
SELECT CAST(booking_date AS DATE), COUNT(*) as number_of_bookings, origin_country_id FROM Booking_Platform_Info
WHERE booking_date >= '2018-01-01' AND
booking_date < '2019-01-01'
GROUP BY origin_country_id;
抱歉,我缺乏知识,但我不知道如何加入查询,以便我可以获得预订差异最大的国家/地区 ID。
您需要加入这两个查询来比较计数。
您也不应该在 SELECT
列表中包含 CAST(booking_date AS DATE)
。不需要,它只是一年中随机选择的日期。
SELECT country_name
FROM (
SELECT a.origin_country_id
FROM (
SELECT origin_country_id, COUNT(*) AS 2017_total
FROM Booking_Platform_Info
WHERE STR_TO_DATE(booking_date, '%d-%b-%Y') BETWEEN '2017-01-01' AND '2017-12-31'
) AS a
JOIN (
SELECT origin_country_id, COUNT(*) AS 2018_total
FROM Booking_Platform_Info
WHERE STR_TO_DATE(booking_date, '%d-%b-%Y') BETWEEN '2018-01-01' AND '2018-12-31'
) AS b
ORDER BY 2018_total - 2017_total
LIMIT 1
) as t1
JOIN Customer_Country_Info AS t2 ON t1.origin_country_id = t2.origin_country_id
我有两个 table。一个是包含所有酒店预订数据的 Booking_Platform table。第二个是 Customer_Country_Table,它存储每个通过该平台预订酒店的客户的来源信息。
我要计算一下从 2017 年到 2018 年哪个国家的预订量增幅最大。
下面给出一些示例数据供参考:
Booking_Platform_Info
Booking_Date column2 column3.... column N ....... Origin_Country_ID
20-dec-2016 .................................... 103
03-jan-2017 .................................... 101
09-feb-2017 .................................... 103
23-apr-2017 .................................... 102
06-oct-2017 .................................... 102
11-nov-2017 .................................... 103
05-jan-2018 .................................... 102
21-jan-2018 .................................... 102
26-feb-2018 .................................... 101
09-mar-2018 .................................... 101
11-may-2018 .................................... 103
10-sep-2018 .................................... 102
20-nov-2018 .................................... 101
07-dec-2018 .................................... 101
23-dec-2018 .................................... 101
31-dec-2018 .................................... 103
23-jan-2019 .................................... 103
Customer_Country_Info
Country_ID Country_Name
101 Italy
102 Spain
103 Portugal
这对我来说有点复杂,据我所知,我必须先加入 tables,然后按国家分组,然后统计总数。按年份的预订(可能是另一个分组依据);然后比较结果,看看哪个国家/地区在 2017-2018 年的预订方面具有最大的正差异。我欢迎任何有关编码此问题的帮助。
在我的示例中,国家 101 意大利将是答案,因为 2018 年和 2017 年的预订差异最大 (5-1=4)
*********评论后编辑
我正在编写两个查询以按国家/地区 ID 获取 2017 年和 2018 年的预订总数
SELECT CAST(booking_date AS DATE), COUNT(*) as number_of_bookings, origin_country_id FROM Booking_Platform_Info
WHERE booking_date >= '2017-01-01' AND
booking_date < '2017-01-01'
GROUP BY origin_country_id;
SELECT CAST(booking_date AS DATE), COUNT(*) as number_of_bookings, origin_country_id FROM Booking_Platform_Info
WHERE booking_date >= '2018-01-01' AND
booking_date < '2019-01-01'
GROUP BY origin_country_id;
抱歉,我缺乏知识,但我不知道如何加入查询,以便我可以获得预订差异最大的国家/地区 ID。
您需要加入这两个查询来比较计数。
您也不应该在 SELECT
列表中包含 CAST(booking_date AS DATE)
。不需要,它只是一年中随机选择的日期。
SELECT country_name
FROM (
SELECT a.origin_country_id
FROM (
SELECT origin_country_id, COUNT(*) AS 2017_total
FROM Booking_Platform_Info
WHERE STR_TO_DATE(booking_date, '%d-%b-%Y') BETWEEN '2017-01-01' AND '2017-12-31'
) AS a
JOIN (
SELECT origin_country_id, COUNT(*) AS 2018_total
FROM Booking_Platform_Info
WHERE STR_TO_DATE(booking_date, '%d-%b-%Y') BETWEEN '2018-01-01' AND '2018-12-31'
) AS b
ORDER BY 2018_total - 2017_total
LIMIT 1
) as t1
JOIN Customer_Country_Info AS t2 ON t1.origin_country_id = t2.origin_country_id