【问题标题】:how to get no of employees dept wise who joined after 1st jan 1983如何获得 1983 年 1 月 1 日之后加入的员工
【发布时间】:2016-06-24 23:29:57
【问题描述】:

假设我有这张桌子:

+-----+------+------------+
| eid | dept | joining    |
+-----+------+------------+
|   1 | IT   | 1982-01-13 |
|   2 | IT   | 1983-01-13 |
|   3 | CSE  | 1984-04-13 |
|   4 | CSE  | 1983-03-23 |
|   5 | IT   | 1985-03-23 |
|   6 | ECE  | 1986-03-23 |
|   7 | ECE  | 1986-11-23 |
+-----+------+------------+

现在我想获取 1983 年 1 月 1 日之后加入的每个部门的员工人数记录。

我试过这个查询:

select count(a.eid) as total, dept
from (
    select *
    from t1
    where dept = 'IT'
    having DATE(joining) > '1982-01-01'
) as a;

+-------+------+
| total | dept |
+-------+------+
|     3 | IT   |
+-------+------+

但我需要一张桌子上的所有部门。

select joining, dept, count(*)
from t1
group by dept
having(joining) > '1982-01-01'
order by joining;

没有这样的结果。

【问题讨论】:

  • Oracle 是如何参与其中的?
  • sql 查询可能因数据库而异...这就是为什么我会涉及 mysql/oracle...
  • 但是你在这里使用的是哪一个? (如果没有,SQL 标记就足够了。)顺便说一句,那个 DATE 函数似乎是特定于产品的 - 或者?
  • oracle 10g 和 mysql

标签: java mysql sql select count


【解决方案1】:

您是否尝试过简单地将日期移到 WHERE 子句中,而不是将其放在 GROUP BY 中,如下所示:

SELECT joining, dept, count(*)
FROM t1
WHERE joining > '1982-01-01'
GROUP BY dept
ORDER BY joining ACS;

【讨论】:

    【解决方案2】:

    having 子句是应用于group by 子句创建的组的条件。您需要使用简单的where 子句将条件分别应用于每一行:

    SELECT   dept, COUNT(*)
    FROM     t1
    WHERE    joining > '1982- 01-01'
    GROUP BY dept
    

    【讨论】:

      【解决方案3】:

      您需要一个简单的 group by 子句,其中包含过滤所需日期的 where,如下所示:

      select dept,count(*)
      from t1
      where joining > '1982-01-01' 
      group by dept
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 2017-06-08
        相关资源
        最近更新 更多