0

我从来没有对联合查询进行过计数,并且遇到了正确完成它的问题。

我正在运行以下查询:

SELECT *
FROM
   (
      SELECT vg.vertrekluchthaven AS code, count(*) as countv
      FROM tbl_vluchtgegevens vg
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.vertrekluchthaven

    UNION  

      SELECT vg.aankomstluchthaven AS code, count(*) as counta
      FROM tbl_vluchtgegevens vg  
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.aankomstluchthaven
   ) vg

INNER JOIN tbl_luchthaven lh
ON  lh.luchthavenID = vg.code
GROUP BY vg.code
ORDER BY lh.luchthavencode;

最终,我想弄清楚如何计算每个联合查询中的每个代码。当我运行代码时,我得到了 countv 的计数,但我没有得到任何类型的 counta。

这就是我正在寻找的:

+-------+-----------+-----------+-----------+  
| CODE  |   Name    | count v   | count a   |  
+-------+-----------+-----------+-----------+  
| AMS   | LONG NAME |     5     |     8     |  
| MSP   | LONG NAME |     5     |     2     |   
| WAS   | LONG NAME |     2     |     0     | 
+-------+-----------+-----------+-----------+
4

2 回答 2

0

您将使用“tbl_luchthaven”加入联合查询的结果。也许那里没有您的代码之一的记录,因此最终结果集中的给定代码不会显示任何行。

于 2013-09-14T06:16:08.310 回答
0

您需要将这两个计数放在不同的列中,以便在分组时将它们分开。然后用于MAX()获取每个的非零计数。

SELECT code, name, MAX(countv) countv, MAX(counta) counta
FROM (
      SELECT vg.vertrekluchthaven AS code, count(*) as countv, 0 as counta
      FROM tbl_vluchtgegevens vg
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.vertrekluchthaven

    UNION  

      SELECT vg.aankomstluchthaven AS code, 0 as countv, count(*) as counta
      FROM tbl_vluchtgegevens vg  
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.aankomstluchthaven
   ) vg

INNER JOIN tbl_luchthaven lh
ON  lh.luchthavenID = vg.code
GROUP BY vg.code
ORDER BY lh.luchthavencode;
于 2013-09-14T06:08:02.180 回答