计算年轻人或同龄人的SQL查询

计算年轻人或同龄人的SQL查询,sql,db2,Sql,Db2,我对SQL查询有问题。我必须计算有多少其他员工比当前行中的员工年轻或与之年龄相同。我试过几种方法,但都不管用。它在DB2中给出了一个错误,即标量fullselect、SELECT INTO语句或VALUES INTO语句的结果不止一行。。这是我的疑问: 如果使用where…>=subselect,subselect不能返回超过1行。我想 SELECT e.EMPNO, e.BIRTHDATE, YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE, COUNT(EMPN

我对SQL查询有问题。我必须计算有多少其他员工比当前行中的员工年轻或与之年龄相同。我试过几种方法,但都不管用。它在DB2中给出了一个错误,即标量fullselect、SELECT INTO语句或VALUES INTO语句的结果不止一行。。这是我的疑问:

如果使用where…>=subselect,subselect不能返回超过1行。我想

SELECT e.EMPNO, e.BIRTHDATE, YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE, COUNT(EMPNO) AS COUNT
FROM EMPLOYEE e
WHERE YEAR(CURRENT_DATE - e.BIRTHDATE) >=
(SELECT MAX(YEAR(CURRENT_DATE - BIRTHDATE)) FROM EMPLOYEE
WHERE EMPNO > e.EMPNO)
GROUP BY EMPNO, e.BIRTHDATE
将工作-注意我插入的最大值

第二次尝试:

SELECT e.EMPNO, e.BIRTHDATE, YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE, COUNT(f.EMPNO)
from EMPLOYEE e, EMPLOYEE f
WHERE f.BIRTHDATE <= E.BIRTHDATE
and f.EMPNO <> e.EMPNO
GROUP BY e.EMPNO, e.BIRTHDATE, YEAR(CURRENT_DATE - e.BIRTHDATE)

您正在以这种方式连接表本身。

此查询的问题是,SELECT YEARCURRENT_DATE-BIRTHDATE FROM EMPLOYEE 其中EMPNO>e.EMPNO子查询返回多行

您可以通过使用联接来修复此问题,如下所示:

SELECT
    e.EMPNO
,   e.BIRTHDATE
,   YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE
,   COUNT(other.EMPNO) AS COUNT
FROM EMPLOYEE e
JOIN EMPLOYEE other
  ON other.EMPNO <> e.EMPNO AND YEAR(CURRENT_DATE - e.BIRTHDATE) >= YEAR(CURRENT_DATE - other.BIRTHDATE)
GROUP BY EMPNO, e.BIRTHDATE
SELECT
    e.EMPNO
,   e.BIRTHDATE
,   YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE
,   (SELECT COUNT(*) FROM EMPLOYEE other WHERE other.EMPNO <> e.EMPNO AND YEAR(CURRENT_DATE - e.BIRTHDATE) >= YEAR(CURRENT_DATE - other.BIRTHDATE) AS COUNT
FROM EMPLOYEE e
您还可以使用子查询来执行此操作,如下所示:

SELECT
    e.EMPNO
,   e.BIRTHDATE
,   YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE
,   COUNT(other.EMPNO) AS COUNT
FROM EMPLOYEE e
JOIN EMPLOYEE other
  ON other.EMPNO <> e.EMPNO AND YEAR(CURRENT_DATE - e.BIRTHDATE) >= YEAR(CURRENT_DATE - other.BIRTHDATE)
GROUP BY EMPNO, e.BIRTHDATE
SELECT
    e.EMPNO
,   e.BIRTHDATE
,   YEAR(CURRENT_DATE - e.BIRTHDATE) AS AGE
,   (SELECT COUNT(*) FROM EMPLOYEE other WHERE other.EMPNO <> e.EMPNO AND YEAR(CURRENT_DATE - e.BIRTHDATE) >= YEAR(CURRENT_DATE - other.BIRTHDATE) AS COUNT
FROM EMPLOYEE e

我设法用另一种方法进行了此操作,但我想知道此查询的问题是什么。当代码缩进四个空格时,不需要反勾号。请定义小于或等于的年龄。您当前使用的年份将选择在给定员工年龄之前出生的其他员工;我出生在7月份,每年10个月内,5月份出生的员工将被视为与我同龄。除此之外,这使得在运行查询时,当前的_日期非常重要-根据此处的用途,您可能需要提供一个值来代替当前的_日期,以便能够追溯计算计数。根据此作业的运行方式,您可能还需要报告当前的_日期。谢谢,但这并不像我希望的那样有效-要计算有多少其他员工比当前行中的员工年轻或与之年龄相同。你能告诉我怎么做吗?@YordankaToteva不客气!这两个查询中的任何一个对您有效吗?