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

时间:2015-03-19 09:03:58

标签: mysql sql join subquery

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

我想知道每辆车最常搜索的10个零件是什么。 下面我做了一个存储在数据库中的数据的例子。

一个表格包含车辆ID的车辆名称。
一张表格包含每辆车的一个或多个请求ID(' s)的请求。
一个表格包含请求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)

查询应返回的内容是这样的,例如' achterband'被发现两次

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 ` 

是否有人知道如何获得正确的数据?

2 个答案:

答案 0 :(得分:1)

试试这个:

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 ` 

答案 1 :(得分:0)

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

以下查询返回前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`