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"。
注意:我浏览过类似的问题,但他们没有回答我的问题。
为了练习 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"。