返回两列中多次出现的Year-Value

时间:2019-03-17 07:35:58

标签: mysql sql

我想选择在两列之间出现多次的所有年份。

这是我到目前为止所拥有的:

SELECT YEAR(`Date1`), COUNT(*) as Counter
from (SELECT YEAR(`Date1`)
      from table1 UNION 
      SELECT YEAR(`date2`)
      from table1
     ) as year
GROUP by YEAR(`date1`)
WHERE Counter > 2;

我感谢任何建议!

谢谢。

2 个答案:

答案 0 :(得分:1)

使用GROUP BY时,您需要像下面这样使用HAVING而不是WHERE

SELECT   Y , 
         COUNT(*) AS Counter 
FROM     ( 
                SELECT DISTINCT YEAR(`Date1`) Y
                FROM   table1 
                UNION ALL 
                SELECT DISTINCT YEAR(`date2`) Y
                FROM   table1) AS YEAR 
GROUP BY Y 
HAVING    COUNT(*) > 2;

注意:您无需在外部查询中再次输入YEAR,也可以为每列输入DISTINCT,这样就不会为该列重复。

>

答案 1 :(得分:0)

我认为您的问题是UNION。它必须为UNION ALL,否则您将永远找不到重复项。

然后,您可以简单地执行以下操作:

SELECT yyyy, COUNT(*) as Counter
FROM (SELECT YEAR(`Date1`) as yyyy
      FROM table1 
      UNION ALL 
      SELECT YEAR(`date2`) as yyyy
      FROM table1
     ) y
GROUP BY yyyy
HAVING Counter >= 2;

请注意查询的更改:

  • UNION ALL而不是UNION,因此子查询不会消除重复项。
  • 为年份指定列别名,在这种情况下为yyyy
  • 在外部查询中使用列别名。
  • 使用HAVING代替WHERE