ORDER BY 查询结果(嵌套?)

ORDER BY results of a query (nested?)

注意:我浏览过类似的问题,但他们没有回答我的问题。

为了练习 SQL,我在 MS Access 中创建了一个测试数据库。它存储有关汽车商店业务的信息。布局是这样的:

我希望列出(按他们分组)使用给定品牌最频繁 bought/ordered 服务的汽车。我不知道如何在这里使用 ORDER BY 子句。 SO: 每个品牌只应显示一次,以及最常购买的服务。

示例:
保时捷 |换油
福特 |轮胎更换
雪佛兰 |更换刹车油
等等

我想我应该以某种方式嵌套它,但我不知道该怎么做。

我能够构建以下查询,它将列出 所有 汽车服务关系:

SELECT cars.Make, services.[Service name]
FROM (repairs 
INNER JOIN cars ON cars.[Car number] = repairs.[Car number]) 
INNER JOIN services ON services.ID = repairs.[Service ID]
GROUP BY cars.Make, services.[Service name];

如何正确构建此查询,如上所述?

你能试试这个在子查询中使用 MAX 和 COUNT 的查询吗?

SELECT sub1.make, sub1.[Service name]
FROM (
    SELECT cars.Make, services.[Service name], COUNT(*) as COUNTREPAIR
    FROM (repairs 
    INNER JOIN cars ON cars.[Car number] = repairs.[Car number]) 
    INNER JOIN services ON services.ID = repairs.[Service ID]
    GROUP BY cars.Make, services.[Service name]
) sub1
INNER JOIN
    (SELECT sub2.make, MAX(COUNTREPAIR) as MAXCOUNT
    FROM 
        (
        SELECT cars.Make, services.[Service name], COUNT(*) as COUNTREPAIR
        FROM (repairs 
        INNER JOIN cars ON cars.[Car number] = repairs.[Car number]) 
        INNER JOIN services ON services.ID = repairs.[Service ID]
        GROUP BY cars.Make, services.[Service name]
        ) sub2
    GROUP BY sub2.Make
    ) sub3
ON sub1.COUNTREPAIR = sub3.MAXCOUNT
AND sub1.MAKE = sub3.MAKE;

我将一个 Access 数据库和一些模仿您的虚拟数据放在一起,希望它能为您提供所需的结果。

如果您想要这些服务的 COUNT 个,可以在第一行末尾添加一个 "sub1.COUNTREPAIR"。