我的(子)查询结果在下面的数据集: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