在联合子查询中使用列以上 2 级

Using 2 levels avobe column in union subquery

我有一个非常复杂的查询,它涉及一个子查询,这个子查询用作联合 table。我想使用第一级的列(子查询之前的字段)作为联合中 where 子句的一部分。像这样:

SELECT 
    type, 
    registered_number - (
        SELECT 
            MAX(last)
        FROM (
            SELECT 
                MAX(b) as last
            FROM 
                x
            WHERE  
                a = type 
            UNION ALL 
            SELECT 
                MAX(b) as last
            FROM 
                y
            WHERE 
                a = type
        ) as last_table
    ) as last
FROM `x`;

示例数据

Table X

a b
1 25
2 26
3 27

TABLE Y

a b
1 25
2 24
3 31

TABLE s

id type registered_number
1 1 7
2 2 8
3 3 9

预期结果

type last
1 18
2 18
3 22

我建议首先对 xy 表进行联合,然后将 s 连接到联合子查询的聚合。

SELECT s.type, t.b AS last
FROM s
INNER JOIN
(
    SELECT a, MAX(b) AS b
    FROM
    (
        SELECT a, b FROM x
        UNION ALL
        SELECT a, b FROM y
    ) t
    GROUP BY a
) t
    ON t.a = s.type
ORDER BY s.type;