MySQL - вернуть значения на основе TOP 5 в другой таблице - PullRequest
0 голосов
/ 01 мая 2019

пытается создать динамическую ссылку, где ТОП 5 из другой таблицы будет выводить результаты (ниже приведен пример, основанный на ТОП 1, чтобы уменьшить длину кода). Основная проблема в том, что я не могу использовать команду LIMIT. У меня есть эта таблица

CREATE TABLE work1
(
wo int (5),
duration int (5));

insert into work1 values 
( 1 ,30),
( 2 ,45),
( 3 ,30),
( 4 ,40),
( 5 ,60),
( 6 ,80),
( 7 ,11);

и эта

CREATE TABLE part1
(
part VARCHAR (5),
wo int (5));

insert into part1 values 
("A" ,1),
('A' ,2),
('A' ,3),
('A' ,4),
('A' ,5),
('B' ,6),
('B' ,7),
('C' ,8),
('C' ,9),
('D' ,10);

Мои результаты в основном топ 1 Счет(часть) из части1 с wo и продолжительностью из таблицы work1.

В этом случае часть A находится наверху со счетом 5, а результаты, которые я получаю, соответствуют приведенным ниже:

wo  part    duration
1   A       30
2   A       45
3   A       30
4   A       40
5   A       60

Ответы [ 2 ]

0 голосов
/ 01 мая 2019
select  p.wo, p.part, w.duration from part1 p inner join work1 w 
on p.wo=w.wo 
having count(p.*)<6
0 голосов
/ 01 мая 2019

Это нацелено на ответ на оригинальный вопрос таргетинга («полный») MySQL.


Суммируйте part1, чтобы получить счет за part и упорядочить по этому количеству по убыванию, взяв верхнюю 1, используя LIMIT. Затем соедините две таблицы с этой производной таблицей.

SELECT w1.wo,
       p2.part,
       w1.duration
       FROM (SELECT p1.part
                    FROM part1 p1
                    GROUP BY p1.part
                    ORDER BY count(*) DESC
                    LIMIT 1) x
            INNER JOIN part1 p2
                       ON p2.part = x.part
            INNER JOIN work1 w1
                       ON w1.wo = p2.wo;

дб <> скрипка

Чтобы изменить это с 1 на 5 сверху, измените LIMIT 1 на LIMIT 5.

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