2015-03-19 73 views
0

我有以下數據存儲在我的數據庫中。Sql顯示每個組的前10個請求產品

我想知道每個車的10個最受歡迎的零件是什麼。 下面我做了一個存儲在數據庫中的數據的例子。

一個表格包含帶車號的汽車的名稱。
一個表格包含每個車輛有一個或多個請求標識(的)的請求。
一張表包含請求標識和請求部分的名稱。

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 

,我目前擁有數部分「電動機」多久一直查詢請求每一輛車。但我無法找到如何做到這一點,不僅僅是爲了一個產品,而是爲了所有這些產品。現在,由於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 ` 

有沒有人有一個想法,我可以得到正確的數據?

+0

如果你喜歡,可以考慮下列行爲這個簡單的兩步過程:1.如果您還沒有這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相符的所需結果集。 – Strawberry 2015-03-19 10:57:33

+0

kopeling未找到兩次? – Strawberry 2015-03-19 10:59:09

回答

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 ` 
+0

感謝您的幫助! ^^ – Szenis 2015-03-19 12:39:05

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` 
相關問題