【问题标题】:SQL sort and order tableSQL排序和排序表
【发布时间】:2022-01-23 16:20:06
【问题描述】:

我一直在尝试这个,但没有达到我想要的确切结果。

我有这张桌子

id  aviacompany destination departure_time  duration
1   Alaska Air  ATL                09-45    180
2   Alaska Air  ATL                00-56    195
3   Alaska Air  LAS                01-00    304
4   JetBlue     MIA                06-10    256
5   JetBlue     ATL                09-50    200
6   JetBlue     MIA                18-43    270
7   JetBlue     SFO                23-24    180
8   Silver      DTW                07-10    120
9   Silver      SEA                18-01    137
10  Silver      DTW                19-32    183

我想按每个航空公司运营的航班总数降序排序;

• 如果出现平局,请按航空公司名称的字母顺序排序

• 然后,按同一航空公司运营的飞往特定目的地的航班总数排序

• 如果出现平局,请按目标列按字母顺序排序

• 最后,如果还有平局,按时间顺序按department_time 列排序。

输出应如下所示:

id  destination departure_time
4   MIA         06-10
6   MIA         18-43
5   ATL         09-50
7   SFO         23-24
2   ATL         00-56
1   ATL         09-45
3   LAS         01-00
8   DTW         07-10
10  DTW         19-32
9   SEA         18-01

谢谢

【问题讨论】:

    标签: mysql sql database group-by sql-order-by


    【解决方案1】:

    假设您使用的是 MySql 8,您可以使用 窗口函数 导出所需的排序条件

    select id, destination, departure_time
    from (
        select *, 
        Count(*) over(partition by aviacompany) aQty,
        Count(*) over(partition by aviacompany,destination) dQty
        from t
    )t
    order by 
      aQty desc, 
      aviacompany,
      dQty desc, 
      destination, 
      departure_time
    

    Demo Fiddle

    【讨论】:

    • 谢谢。快速一个,列在分区子句中出现的顺序是否重要?例如:Will Count() over(partition by aviacompany,destination) dQty 和 Count() over(partition by destination, aviacompany) dQty给出相同的输出?请问这是什么逻辑?
    • 不,它们对行的分区是一样的——你可以试试看。
    猜你喜欢
    • 2015-08-18
    • 2018-06-27
    • 2014-11-07
    • 2015-08-17
    • 2014-06-30
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多