繁体   English   中英

Oracle 11g SQL Group by Quarter

[英]Oracle 11g SQL Group by Quarter

我试图显示按季度分组的以下信息:

  • 本季度开始的项目数量
  • 本季度从事这些项目的员工人数
  • 每个项目平均花费的小时数。

到目前为止,所有我想出的是:

SELECT   CASE
             WHEN Start_Date >= '01-JAN-14' AND Start_Date <= '31-MAR-14' THEN 'Q1'
             WHEN Start_Date >= '01-APR-14' AND Start_Date <= '30-JUN-14' THEN 'Q2'
             WHEN Start_Date >= '01-JUL-14' AND Start_Date <= '30-SEP-14' THEN 'Q3'
             WHEN Start_Date >= '01-OCT-14' AND Start_Date <= '31-DEC-14' THEN 'Q4'
         END AS "Quarter",
         COUNT(Proj_Number) Num, SUM(COUNT(Emp_Num)),AVG(Hours_Used)
FROM     Project JOIN Assignment USING (Proj_Number) JOIN Employee USING (Emp_Num)
WHERE    Start_Date >= '01-JAN-14' AND Start_Date <= '31-DEC-14'
GROUP BY Start_Date,Emp_Num;

我认为使用to_char(xxx, 'Q')获得季度要容易得多:

SELECT TO_CHAR(Start_Date, 'Q') AS "Quarter",
       COUNT(Proj_Number) as Num, COUNT(Emp_Num), AVG(Hours_Used)
FROM Project JOIN
     Assignment
     USING (Proj_Number) JOIN
     Employee
     USING (Emp_Num)
WHERE Start_Date >= DATE '2014-01-01' AND Start_Date <= DATE '2014-12-31'
GROUP BY TO_CHAR(Start_Date, 'Q');

您应该按季度对进行这些项目的项目和企业的数量进行分组:

SELECT   CASE
         WHEN Start_Date >= '01-JAN-14' AND Start_Date <= '31-MAR-14' THEN 'Q1'
         WHEN Start_Date >= '01-APR-14' AND Start_Date <= '30-JUN-14' THEN 'Q2'
         WHEN Start_Date >= '01-JUL-14' AND Start_Date <= '30-SEP-14' THEN 'Q3'
         WHEN Start_Date >= '01-OCT-14' AND Start_Date <= '31-DEC-14' THEN 'Q4'
     END AS "Quarter",
     COUNT(Proj_Number) Num, COUNT(Emp_Num) emp_count
FROM     Project JOIN Assignment USING (Proj_Number) JOIN Employee USING (Emp_Num)
WHERE    Start_Date >= '01-JAN-14' AND Start_Date <= '31-DEC-14'
GROUP BY "Quarter";

并且您应该对每个项目花费的小时数有不同的查询

SELECT   CASE
             WHEN Start_Date >= '01-JAN-14' AND Start_Date <= '31-MAR-14' THEN 'Q1'
             WHEN Start_Date >= '01-APR-14' AND Start_Date <= '30-JUN-14' THEN 'Q2'
             WHEN Start_Date >= '01-JUL-14' AND Start_Date <= '30-SEP-14' THEN 'Q3'
             WHEN Start_Date >= '01-OCT-14' AND Start_Date <= '31-DEC-14' THEN 'Q4'
         END AS "Quarter",
         Proj_Number ,AVG(Hours_Used) hours_spent
FROM     Project JOIN Assignment USING (Proj_Number) JOIN Employee USING (Emp_Num)
WHERE    Start_Date >= '01-JAN-14' AND Start_Date <= '31-DEC-14'
GROUP BY "Quarter" ,Proj_Number;

您可能希望加入它们以查看一个查询中的所有信息

SELECT quarter.Quarter,quarter.Num as proj_count, quarter.emp_count,
                 proj.Proj_Number, proj.hours_spent
            FROM (SELECT   CASE
             WHEN Start_Date >= '01-JAN-14' AND Start_Date <= '31-MAR-14' THEN 'Q1'
             WHEN Start_Date >= '01-APR-14' AND Start_Date <= '30-JUN-14' THEN 'Q2'
             WHEN Start_Date >= '01-JUL-14' AND Start_Date <= '30-SEP-14' THEN 'Q3'
             WHEN Start_Date >= '01-OCT-14' AND Start_Date <= '31-DEC-14' THEN 'Q4'
         END AS "Quarter",
         COUNT(Proj_Number) Num, COUNT(Emp_Num) emp_count
    FROM     Project JOIN Assignment USING (Proj_Number) JOIN Employee USING (Emp_Num)
    WHERE    Start_Date >= '01-JAN-14' AND Start_Date <= '31-DEC-14'
    GROUP BY "Quarter") quarter, 
    (SELECT   CASE
                 WHEN Start_Date >= '01-JAN-14' AND Start_Date <= '31-MAR-14' THEN 'Q1'
                 WHEN Start_Date >= '01-APR-14' AND Start_Date <= '30-JUN-14' THEN 'Q2'
                 WHEN Start_Date >= '01-JUL-14' AND Start_Date <= '30-SEP-14' THEN 'Q3'
                 WHEN Start_Date >= '01-OCT-14' AND Start_Date <= '31-DEC-14' THEN 'Q4'
             END AS "Quarter",
             Proj_Number ,AVG(Hours_Used) hours_spent
    FROM     Project JOIN Assignment USING (Proj_Number) JOIN Employee USING (Emp_Num)
    WHERE    Start_Date >= '01-JAN-14' AND Start_Date <= '31-DEC-14'
    GROUP BY "Quarter" ,Proj_Number) proj
            WHERE quarter.Quarter = proj.Quarter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM