簡體   English   中英

MySQL UNION 2集,結果來自1個表

[英]MySQL UNION 2 sets with results from 1 table

我有下表

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列的數量。 非常感謝任何提示和技巧。 我認為我正在忽略某些內容,但找不到最后一點來使此查詢正常工作

做一個Join而不是UNION

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM