Как мы можем объединить общие таблицы в MySQL? - PullRequest
0 голосов
/ 13 ноября 2018

У меня сложный запрос в Postgres, который я пытаюсь преобразовать в MySQL.Запрос Postgres имеет три связанных запроса.Первые два создают две общие таблицы, а последний запрос объединяет эти две общие таблицы.Упрощенная версия запроса выглядит примерно так.Есть ли способ объединить эти две общие таблицы в MySQL?Мне нужно, чтобы запрос выполнялся для 5.6,5.7 и 8.0, поэтому новая функция для CTE в 8.0 не является решением.

(Select table1.y_id as year_id, 
       SUM(table1.total_weight) AS metric_value
       from (SELECT student_name,y_id,total_weight from student_metrics where y_id>10 ) table1
       group by year_id
       order by metric_value DESC
       limit by 5
 )table2

Третий запрос должен объединить table1 и table2 на table1.y_id = table2.year_id.

Чтобы дать общее представление о том, что делает каждый запрос:

  1. Запрос 1 выбирает данные из главной таблицы (скажем, таблица 1) и сохраняет их в общей таблице на основе некоторых условий.
  2. Запрос 2 групп и сортировка строк, полученных в Запросе 1, на основе указанного пользователемстолбец и ограничивает его до верха 'N'
  3. Запрос 3 возвращает все данные (в таблице 1) только этих N уникальных идентификаторов (полученных из таблицы 2), выполнив объединение в table1.id =
    table2.id

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете просто повторить подзапрос table1:

select
    table1.*
from
    (select student_name,y_id,total_weight from student_metrics where y_id>10) as table1
    inner join (
        select tbl1.y_id as year_id, 
        sum(tbl1.total_weight) as metric_value
        from
            (select student_name,y_id,total_weight from student_metrics where y_id>10 ) as tbl1
       group by tbl1.y_id
       order by sum(tbl1.total_weight) desc
       limit by 5
       ) as table2 on table1.y_id = table2.year_id;
...