Sql 显示每个组的前 10 个请求的产品

Sql show top 10 requested products of every group

我的数据库中存储了以下数据。

我想知道每辆车搜索最多的 10 个零件是什么。 下面我以存储在数据库中的数据为例

一个 table 包含具有汽车 ID 的汽车名称。
一个 table 包含每辆汽车具有一个或多个请求 ID 的请求。
一个 table 包含带有请求部分名称的请求 ID。

Table cars

audi        (7)
bmw         (12)

Table request
7           (100)
7           (234)
7           (367)
7           (562)
7           (729)
7           (765)
7           (881)

Table request_parts

100         (achterband)
234         (voorband)
367         (motor)
562         (accu)
729         (achterband)
765         (kopeling)
881         (koeling)

查询应该return是这样的,如示例'achterband' was found twice

audi        achterband      2
audi        voorband        1
audi        motor           1
audi        accu            1
audi        kopeling        1

我目前的查询计算每辆车请求部件 'motor' 的频率。但是我无法找到如何不仅针对一种产品而且同时针对所有产品执行此操作。现在车名已经不重要了,因为 id 已经显示了。

SELECT COUNT(*), requests.sibben_brand_id, request_parts.name
FROM request_parts
JOIN requests ON requests.id = request_parts.request_id
WHERE requests.sibben_brand_id IS NOT NULL 
AND request_parts.name LIKE  'motor'
GROUP BY requests.sibben_brand_id 
ORDER BY COUNT(*) DESC ` 

有人知道我怎样才能得到正确的数据吗?

试试这个:

SELECT COUNT(*), requests.sibben_brand_id, request_parts.name
FROM request_parts
JOIN requests ON requests.id = request_parts.request_id
WHERE requests.sibben_brand_id IS NOT NULL 
GROUP BY requests.sibben_brand_id,request_parts.name
ORDER BY COUNT(*) DESC ` 

cars table as (id,name)
request table as (id,car_id,request_id)
request_parts table as (id,request_id,part_name)`

以下查询returns前10条记录

select top 10 c.name, rqp.part_name,count(*) as repetition
from request as r, request_parts as rqp, cars as c
where rqp.request_id = r.request_id AND r.car_id = c.Id
group by rqp.part_name,c.name
order by repetition desc`