【问题标题】:MySQL: How do I GROUP BY 2 fields and return the maximum of those 2 fields in another?MySQL:如何 GROUP BY 2 个字段并在另一个字段中返回这 2 个字段的最大值?
【发布时间】:2022-11-22 05:01:51
【问题描述】:
Route Incident delay_minute
63 Operator 60
63 Operator 24
63 Mechanical 89
54 Operator 70
54 Sanitation 34
54 Operator 12

从上面的示例表中,我想返回每条路线一行和他们的最常见的事件的类型/形式。这样它看起来像这样:

Route Incident
63 Operator
54 Operator

我尝试了以下查询,但我不确定它是否返回每条路线最常见的事件形式:

SELECT Route
   , Incident
FROM bus_delay;

我也曾尝试使用COUNT(DISTINCT),但我要求每条路线将事件类型作为字符串返回:

SELECT DISTINCT Route
    , Incident
    , COUNT(Incident) AS count_incident
FROM bus_delay
GROUP BY Incident
    , Route;

我如何查询这样的表以针对每条路线返回一行,而该行仅显示该路线最常见的事件形式?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT Z.Route,Z.Incident  FROM
    (
      SELECT C.Route,C.Incident,
       ROW_NUMBER()OVER(PARTITION BY C.Route,C.Incident ORDER BY (SELECT NULL))XCOL
      FROM YOUR_TABLE AS C
    )Z WHERE Z.XCOL>1
    

    【讨论】:

      【解决方案2】:

      使用WINDOW函数和CTE

      WITH CTE as(
         SELECT
            Route,    Incident,   delay_minute,
            ROW_NUMBER() OVER(PARTITION BY Route,     Inciden ORDER BY delay_minute DESC) rn
         FROM bus_delay)
      SELECT
      Route,  Incident,   delay_minute
      FROM CTE WHERE rn = 1
      

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多