MySQL - выберите 10 строк с ограничением на столбец категории - PullRequest
0 голосов
/ 17 апреля 2020

В моей базе данных есть таблица с 3 столбцами: (id, business_id, name). Мне нужно написать запрос, который выбирает 10 строк из таблицы, которые имеют id больше указанного c значения , и дело в том, что для каждого business_id должно быть выбрано не более 5 строк. как включить этот критерий в запрос?

так, например, если у нас есть эти строки в таблице:

1   A   JAD
2   A   LPO
3   A   LMN
4   A   ABC
5   A   QWE
6   A   WER
7   B   TYU
8   B   POI
9   B   AQZ
10  B   UYT
11  C   CDE
12  C   XYZ

желаемый результат (для id> 0):

1   A   JAD
2   A   LPO
3   A   LMN
4   A   ABC
5   A   QWE
7   B   TYU
8   B   POI
9   B   AQZ
10  B   UYT
11  C   CDE

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Если вы используете MySQL 8+, то здесь можно использовать ROW_NUMBER:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY business_id ORDER BY id) rn
    FROM yourTable
)

SELECT id, business_id, name
FROM cte
WHERE rn <= 5;
0 голосов
/ 17 апреля 2020

В более старых версиях MySQL вы можете использовать:

select t.*
from t
where id > @id and
      id < any (select t2.id
                from t t2
                where t2.business_id = t.business_id
                order by id asc
                limit 1 offset 4
               )
limit 10;

any предназначен для случая, когда в бизнесе менее четырех строк.

...