我的(子)查詢結果在下面的數據集:MySQL - 如何使用GROUP BY/ORDER BY和「嵌套」數據集?
+---------+------------+-----------+
| item_id | version_id | relevance |
+---------+------------+-----------+
| 1 | 1 | 30 |
| 1 | 2 | 30 |
| 2 | 3 | 22 |
| 3 | 4 | 30 |
| 4 | 5 | 18 |
| 3 | 6 | 30 |
| 2 | 7 | 22 |
| 1 | 8 | 30 |
| 5 | 9 | 48 |
| 4 | 10 | 18 |
| 5 | 11 | 48 |
| 3 | 12 | 30 |
| 3 | 13 | 31 |
| 4 | 14 | 19 |
| 2 | 15 | 22 |
| 1 | 16 | 30 |
| 5 | 17 | 49 |
| 2 | 18 | 22 |
+---------+------------+-----------+
18 rows in set (0.00 sec)
項目和版本存儲在單獨的InnoDB桌。 這兩個表都具有自動遞增主鍵。 版本具有項目的外鍵(item_id)。
我的問題:如何根據相關性獲取子集?
我想獲得一個包含最相關的版本的子集:
+---------+------------+-----------+
| item_id | version_id | relevance |
+---------+------------+-----------+
| 1 | 16 | 30 |
| 2 | 18 | 22 |
| 3 | 13 | 31 |
| 4 | 14 | 19 |
| 5 | 17 | 49 |
+---------+------------+-----------+
這將是更理想的平等相關的情況下,以獲取MAX(VERSION_ID)。
我嘗試了許多方式進行分組,加入,排序等等,但我無法獲得理想的效果。 一些我試過的一件事是:
SELECT item_id, version_id, relevance
FROM (subquery) a
GROUP BY item_id
ORDER BY relevance DESC, version_id DESC
但是,當然,事後的排序發生了,這樣既相關性和MAX(VERSION_ID)信息丟失。
請指教。
你'GROUP BY item_id',但你沒有在'version_id'或'relevance'上指定一個聚合,所以它們的值將被每個組隨機選擇一個桶。 – Nikhil