从有限制的数据库表中获取分类数据



我试图从一个表中获取每个类别的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

最新更新