MySQL UNION 2组,结果来自1个表

MySQL UNION 2组,结果来自1个表,mysql,Mysql,我有下表 CREATE TABLE IF NOT EXISTS `eurojackpot` ( `datum_trekking` date NOT NULL, `g1` tinyint(2) NOT NULL, `g2` tinyint(2) NOT NULL, `g3` tinyint(2) NOT NULL, `g4` tinyint(2) NOT NULL, `g5` tinyint(2) NOT NULL, `b1` tinyint(2) NOT NULL, `b2` tinyint(2

我有下表

CREATE TABLE IF NOT EXISTS `eurojackpot` (
`datum_trekking` date NOT NULL,
`g1` tinyint(2) NOT NULL,
`g2` tinyint(2) NOT NULL,
`g3` tinyint(2) NOT NULL,
`g4` tinyint(2) NOT NULL,
`g5` tinyint(2) NOT NULL,
`b1` tinyint(2) NOT NULL,
`b2` tinyint(2) NOT NULL,
UNIQUE KEY `datum_trekking` (`datum_trekking`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我执行下面的查询,它给出了我正在寻找的部分结果集

(SELECT g1 AS Nummer, count(*) AS Aantal
FROM  
( 
SELECT  g1 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  g2 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  g3 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  g4 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  g5 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
) y
GROUP BY  g1
ORDER BY Aantal
DESC
LIMIT 5
)
UNION
(SELECT b1 AS Bonus, count(*) AS aantal_b
FROM  
( 
SELECT  b1 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  b2 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
) z
GROUP BY  b1
ORDER BY aantal_b
DESC
LIMIT 5)
上述查询输出以下一组数据:

+-------+--------+
+Nummer + Aantal +
+-------+--------+
+ 3     + 2      +
+ 22    + 2      +
+ 25    + 2      +
+ 41    + 2      +
+ 35    + 2      +
+ 4     + 3      +
+ 2     + 2      +
+ 8     + 2      +
+ 5     + 2      +
+ 3     + 1      +
+-------+--------+
我要找的是一个输出如下的表:

+-------+--------+-------+----------+
+Nummer + Aantal + Bonus + aantal_b +
+-------+--------+-------+----------+
+ 3     + 2      + 4     + 3        +
+ 22    + 2      + 2     + 2        +
+ 25    + 2      + 8     + 2        +
+ 41    + 2      + 5     + 2        +
+ 35    + 2      + 3     + 1        +
+-------+--------+-------+----------+
查询的基本功能是统计数字的出现次数,并将其限制为5个出现次数最多的数字。它应该计算g1列到g5列和b1列到b2列的数字。
任何提示和提示都将不胜感激。我想我忽略了一些东西,但找不到使此查询正常工作的最后一点

请执行
连接
而不是
联合

SELECT yy.Nummer, yy.Aantal, zz.Bonus, zz.aantal_b
FROM
(
SELECT 
    g1 AS Nummer, 
    count(*) AS Aantal
FROM  ( 
    SELECT  g1 FROM  eurojackpot
        WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
    SELECT  g2 FROM  eurojackpot
        WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
    SELECT  g3 FROM  eurojackpot
        WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
    SELECT  g4 FROM  eurojackpot
        WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
    SELECT  g5 FROM  eurojackpot
        WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
) y
GROUP BY  g1
ORDER BY Aantal
DESC
LIMIT 5
) yy
JOIN
(SELECT b1 AS Bonus, count(*) AS aantal_b
FROM  
( 
SELECT  b1 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
    UNION  ALL 
SELECT  b2 FROM  eurojackpot
  WHERE datum_trekking >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
) z
GROUP BY  b1
ORDER BY aantal_b
DESC
LIMIT 5) zz
ON y.g1 = z.b1

请提供样本数据和预期结果。您的问题没有完全解释如何计算列和行。1。看见normalization@Gordon:当我运行此查询时,我将更新问题中的表。我得到以下错误:#1054-字段列表中的未知列“yy.g1”。有什么想法吗?是的,关于专栏的别名有个小问题。我在我的答案中更新了查询。嗨@Benni,我得到了以下错误:#1054-在“on子句”中的未知列“y.g1”。当我将ON中的值更改为接近yy.numer和zz.Bonus或yy.Aantal和zz.Aantal_b时,它将返回正结果,但不是所需的集。还有其他想法吗?