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