Mysql 在SQL中查找每年租用最多的汽车

Mysql 在SQL中查找每年租用最多的汽车,mysql,sql,Mysql,Sql,我有以下表格: Car(id, make, ....) Deal(id,datetime,car_id,....) 我想写一个查询,返回一年,以及拥有最多交易(即交易ID最多)的汽车的汽车品牌,以及该汽车品牌的交易数量 我一开始 SELECT YEAR(D.datetime) AS the_year, C.make, COUNT(D.id) AS num FROM Deal D, Car C WHERE D.car_id=C.id GROUP BY the_year 不幸的是,这一年又回来了

我有以下表格:

Car(id, make, ....)
Deal(id,datetime,car_id,....)
我想写一个查询,返回一年,以及拥有最多交易(即交易ID最多)的汽车的汽车品牌,以及该汽车品牌的交易数量

我一开始

SELECT YEAR(D.datetime) AS the_year, C.make, COUNT(D.id) AS num
FROM Deal D, Car C
WHERE D.car_id=C.id
GROUP BY the_year
不幸的是,这一年又回来了,交易总数也随之增加。 所以我想在另一个表中创建它,然后调用
MAX(tbl.num)
,但我对语法感到困惑。

谁能帮帮我吗?

这是一个有趣的问题。你要找的是统计中的“模式”。在MySQL中,您可以通过使用变量或
group\u conat()
/substring\u index()`技巧来实现这一点。我将向后者展示:

SELECT the_year,
       substring_index(group_concat(cd.make order by num desc), ',', 1) as the_mark
FROM (SELECT YEAR(D.datetime) AS the_year, C.make, COUNT(D.id) AS num
      FROM Deal D JOIN
           Car C
           ON D.car_id = C.id
      GROUP BY the_year, c.make
     ) cd
GROUP BY the_year;
编辑:

使用变量的版本:

SELECT the_year,
       substring_index(group_concat(cd.make order by num desc), ',', 1) as the_mark
FROM (SELECT YEAR(D.datetime) AS the_year, C.make, COUNT(D.id) AS num,
             @rn := if(@year = YEAR(D.datetime), @rn + 1, 1) as rn,
             @year := YEAR(D.datetime)
      FROM Deal D JOIN
           Car C
           ON D.car_id = C.id CROSS JOIN
           (SELECT @year := 0, @rn := 0) vars
      GROUP BY the_year, c.make
      ORDER BY the_year, num DESC
     ) cd
WHERE rn = 1;

你能按计数(D.id)描述和限制1订购,然后使用该id获取该车的详细信息吗?这是一种有趣的书写方式。谢谢你的帮助