我试图从一个表中获取每个类别的2行,我也提到了类别。当我尝试使用GROUP BY子句获取数据时,我能够为每种类型的类别获得1行,但我想要两行。我怎样才能达到那个结果呢?
例如
| id | name | category |
| 1 |橘子|水果|
| 2 |芒果|水果|
| 3 |樱桃|水果|
| 4 |土豆|蔬菜|
| 5 |洋葱|蔬菜|
| 6 |南瓜|蔬菜|
| 7 |罗勒|香草|
| 8 |黑胡椒|香草|
| 9 |丁香|香草|
表样图,请查看
我想获取每个类别的前两行。
由于我的mysql版本是5.7,我不能像答案中建议的那样使用窗口命令,虽然它可能是正确的,但不适合我的版本。
编辑:解决方案由@jared发布。
解决问题
问题解决。
我认为窗口函数是你想要的:
-- Asuming your table is named 'food'
SELECT * FROM (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY category) AS category_row_index
FROM `food`
) food_catgorized
WHERE
food_catgorized.category_row_index BETWEEN 1 AND 2;
UPD:下面的查询应该在MySql 5.7上工作:
-- Asuming your table is named 'food'
SELECT food.* FROM food
JOIN (
SELECT category, GROUP_CONCAT(id) AS ids
FROM `food`
GROUP BY category
) category_ids
ON
food.category = category_ids.category
WHERE
FIND_IN_SET(food.id, category_ids.ids) BETWEEN 1 AND 2