MySQL-根据不同表中的TOP 5返回值

时间:2019-05-01 14:22:20

标签: mysql sql

尝试建立动态链接,其中来自其他表的TOP 5将驱动结果(下面的示例基于Top 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);

我的结果基本上是part1的前1个Count(part)的wo和work1表的工期。

在这种情况下,A部分位于顶部,计数为5,我所追求的结果如下:

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

2 个答案:

答案 0 :(得分:0)

这旨在回答针对MySQL(“完整”)MySQL的原始问题。


汇总part1,以获取每个part的计数,并以该计数从LIMIT到前1的降序排列。然后将两个表连接到该派生表。

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;

db<>fiddle

要从前1名更改为前5名,请将LIMIT 1更改为LIMIT 5

答案 1 :(得分:0)

select  p.wo, p.part, w.duration from part1 p inner join work1 w 
on p.wo=w.wo 
having count(p.*)<6