SQL - получить несколько вхождений для каждого значения с помощью DISTINCT или GROUP BY - PullRequest
0 голосов
/ 22 февраля 2019

с DISTINCT или GROUP BY запись для каждого значения (или набора значений) может быть взята как в запросе ниже:

SELECT id, MAX(price) FROM Products GROUP BY id

Результат будет что-то вроде:

ID | price
1    10
2    11

Можно ли, например, иметь 3 разные цены для каждого идентификатора?

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Один из способов получить три самые высокие цены - использовать group_concat() и substring_index():

SELECT id,
       SUBSTRING_INDEX(GROUP_CONCAT(price ORDER BY price DESC), ',' 3) as top3_prices
FROM Products
GROUP BY id;
0 голосов
/ 22 февраля 2019

Если ваша версия MySql поддерживает функции Windows, вы можете использовать RANK () и PARTITION

SELECT id, price
FROM (SELECT id, price, RANK() OVER w as price_rank
      FROM test
      WINDOW w as (PARTITION BY id ORDER BY price desc)) r
WHERE price_rank <= 3 
ORDER BY id, price desc
0 голосов
/ 22 февраля 2019

Вы можете попробовать ниже - используя самостоятельное соединение

DEMO

SELECT Products.id, Products.price,COUNT(p.price) AS rank
FROM Products 
LEFT JOIN Products AS p ON Products.id = p.id AND Products.price< p.price
GROUP BY Products.id, Products.price
HAVING COUNT(p.price) < 3
ORDER BY Products.id, Products.price DESC
0 голосов
/ 22 февраля 2019

Вы можете использовать GROUP_CONCAT, если хотите получить все значения, например:

SELECT id, GROUP_CONCAT(price)
FROM table
GROUP BY id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...