我在MySQL數據庫中有數十萬個產品。每個產品都映射到一個子類別,每個子類別映射到一個類別,並且每個類別映射到一個部門。MySQL結果的排名子集
我需要分別計算其類別/分類/部門內的特定產品的銷售排名,也取兩款產品位列其正上方和兩個產品位列其正下方。下面是一個SQL小提琴獲取所有產品的等級,在子類別:
http://sqlfiddle.com/#!2/d4aad/6
我如何重構查詢與給定的product_id加上兩行的上方和下方只返回產品?例如,對於PRODUCT_ID 8我只想返回這些行:
╔══════╦════════════════╦═════════════╦════════════╗ ║ RANK ║ DESCRIPTION ║ TOTAL_SALES ║ PRODUCT_ID ║ ╠══════╬════════════════╬═════════════╬════════════╣ ║ 2 ║ Digital SLR 2 ║ 8000 ║ 2 ║ ║ 3 ║ Digital SLR 7 ║ 5998 ║ 7 ║ ║ 4 ║ Digital SLR 8 ║ 5997 ║ 8 ║ ║ 5 ║ Digital SLR 1 ║ 3297 ║ 1 ║ ║ 6 ║ Digital SLR 4 ║ 3200 ║ 4 ║ ╚══════╩════════════════╩═════════════╩════════════╝
對於PRODUCT_ID 3,返回的數據將是如下:
╔══════╦════════════════╦═════════════╦════════════╗ ║ RANK ║ DESCRIPTION ║ TOTAL_SALES ║ PRODUCT_ID ║ ╠══════╬════════════════╬═════════════╬════════════╣ ║ 6 ║ Digital SLR 4 ║ 3200 ║ 4 ║ ║ 7 ║ Digital SLR 6 ║ 2599 ║ 6 ║ ║ 8 ║ Digital SLR 3 ║ 2468 ║ 3 ║ ║ 9 ║ Digital SLR 10 ║ 1000 ║ 10 ║ ║ 10 ║ Digital SLR 5 ║ 1000 ║ 5 ║ ╚══════╩════════════════╩═════════════╩════════════╝
所以PRODUCT_ID是已知的查詢,但是在執行查詢之前排名是未知的。
考慮提供適當的DDL和/或sqlfiddle連同完成所需的結果集 – Strawberry
。我也幾乎完全重寫了這個問題,目的是爲了更容易理解我想要實現的目標。 – user2927684