Oracle 11g SQL Group by Quarter

时间:2015-12-05 17:30:45

标签: sql oracle oracle11g group-by

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

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

到目前为止,所有人都提出了这个问题:

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;

2 个答案:

答案 0 :(得分:2)

我认为使用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');

答案 1 :(得分:1)

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

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