我一直在試圖解決這個問題,週末,沒有運氣到目前爲止。我有兩個表:每組最大N填充
TopOffers:
OfferId RetailerId Order
1 38 0
2 8 3
3 17 2
4 22 1
而且Offers:
Id RetailerId Name Description etc...
1 3 Strawberry Red and smelly
2 38 Cookie Crunchy
3 17 Onion Of the nice kind
4 22 Apple Cheap
5 8 Toothbrush Lasts extra long!
我的目標是讓高層10提供了每個零售商ID。它們應該列出的順序由TopOffer表中的Order
字段指定(排序順序爲升序)。最重要的是,當零售商的TopOffer記錄少於10個時,結果應填充到10個優惠。 TopOffer表總是包含每個零售商10個或更少的記錄。
到目前爲止,我已經設法實現了這一點,這是有效的(我意識到它沒有得到前10名,而是TopOffer表中的所有內容,這是正常的,因爲TopOffer表總是等於或比前10對任何零售商)小:
SELECT b.*
FROM
(
SELECT o.Id, to.`Order` FROM Offer AS o
LEFT JOIN TopOffer AS to
ON o.Id = to.OfferId
) AS a,
(
SELECT o.*, to.`Order` FROM Offer AS o
LEFT JOIN TopOffer AS to
ON o.Id = to.OfferId
) AS b
WHERE a.`Order` >= b.`Order` AND a.Id = b.Id
GROUP BY b.RetailerId, b.Id
HAVING Count(1) BETWEEN 1 AND 10
ORDER BY RetailerId, `Order` ASC
不幸的是,我似乎無法找到填充沒有在TopOffer表中的條目此查詢與報價的結果的任何方式,如果有不是該零售商的10個TopOffer記錄。
我對任何幫助提前致以衷心的感謝!
的'RetailerID's兩個表中不匹配10。 –
我列出的實際數據更多的是一個例子,理論上並非所有零售商都需要TopOffer表中的條目 –