Как сгруппировать по домену и удалить более двух результатов в базе данных MySQL - PullRequest
0 голосов
/ 24 октября 2018

У меня есть вопрос,Я хотел бы сгруппировать свою таблицу и показать только MAX два значения (например, в алфавитном порядке) для каждого домена. Имя таблицы = таблица1База данных MySQL

Например: enter image description here

Оценка: aa@aa.combb@aa.comaa@example.comcc@example.coma@domain.com

Как видите, запрос должен группироваться по доменам и показывать только MAX TWO записей для каждого домена

Можете ли вы мне помочь?

1 Ответ

0 голосов
/ 24 октября 2018

В MySQL 8.0.2 и выше эта проблема может быть решена с использованием Оконных функций менее подробным образом.

Для вашей версии MySQL5.1.73 , мы можем эмулировать это с помощью переменных сеанса :

SELECT 
  dt2.Email, 
  dt2.Domain 
FROM 
(
  SELECT 
    @row_num := IF(@dmn <> dt1.Domain, 1, @row_num + 1) AS row_no, 
    @dmn := dt1.Domain AS Domain, 
    dt1.Email 
  FROM 
  (
    SELECT 
      Email, 
      Domain 
    FROM Table1 
    ORDER BY Domain 
  ) AS dt1 
  CROSS JOIN (SELECT @row_num := 0, 
                     @dmn := '') AS user_init_vars 
) AS dt2 
WHERE dt2.row_no <= 2 
ORDER BY dt2.Domain 

DB Fiddle DEMO

Вы можете следовать этому руководствучтобы получить общее представление о том, как работает этот подход: http://www.mysqltutorial.org/mysql-row_number/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...