Sql 值范围的平均值

Sql 值范围的平均值,sql,oracle,oracle11g,range,average,Sql,Oracle,Oracle11g,Range,Average,我正在使用Oracle SQL,需要查询方面的帮助 我有下表: Age (int) Salary (int) 输入,例如: Age | Slary 18 | 5000 18 | 10000 20 | 11000 24 | 9000 21 | 6000 21 | 7000 22 | 6000 28 | 22000 Age Range | Average Salary 18 - 20 | 8666.666 19 - 21 | 8000 20 - 22 | 7500 2

我正在使用Oracle SQL,需要查询方面的帮助

我有下表:

Age (int)
Salary (int)
输入,例如:

Age | Slary
 18 | 5000
 18 | 10000
 20 | 11000
 24 | 9000
 21 | 6000
 21 | 7000
 22 | 6000
 28 | 22000
Age Range | Average Salary
18 - 20   | 8666.666
19 - 21   | 8000
20 - 22   | 7500
21 - 23   | 6333.33
22 - 24   | 7500
23 - 25   | 7500
24 - 26   | 7500
26 - 28   | 22000
27 - 29   | 22000
28 - 30   | 22000
我需要按年龄段计算平均工资。每两年都很流行。输出,例如:

Age | Slary
 18 | 5000
 18 | 10000
 20 | 11000
 24 | 9000
 21 | 6000
 21 | 7000
 22 | 6000
 28 | 22000
Age Range | Average Salary
18 - 20   | 8666.666
19 - 21   | 8000
20 - 22   | 7500
21 - 23   | 6333.33
22 - 24   | 7500
23 - 25   | 7500
24 - 26   | 7500
26 - 28   | 22000
27 - 29   | 22000
28 - 30   | 22000
顺便说一句,如果更容易实现,可以将年龄范围列拆分为两个不同的列:最小年龄和最大年龄


有什么建议吗?

这可能有助于MSSQL脚本:

SELECT Cast(LowerLimit AS VARCHAR) + ' - '
       + Cast(UpperLimit AS VARCHAR) AgeRange,
       Avg(salary)                   averagesalary
FROM   MyTable t1
       RIGHT OUTER JOIN (SELECT Age     AS LowerLimit,
                                Age + 2 AS UpperLimit
                         FROM   MyTable) AS t2
                     ON t1.Age >= t2.LowerLimit
                        AND t1.Age <= t2.UpperLimit
GROUP  BY LowerLimit,UpperLimit 

我认为这可能是您想要的,它部分地改编自Deepak Pawar在回答中的方法,但调整为Oracle语法。我注意到23-25组的值在我的查询中是9000,但在您的样本数据中是7500,但我相信样本数据是不正确的,9000确实也是24-26的正确值

Oracle不是我选择的数据库,我相信更熟悉Oracle开发的人可以改进查询

Oracle 11g R2架构设置:

问题1:


请提供一些信息……三年的范围是否会重叠?@建设者:我不确定我是否完全理解了你的问题。“年龄”列中的值未知。例如,值34-36中可能没有年龄,因此年龄范围输出列中不包括该范围。当最年轻的年龄为奇数(例如19)时会发生什么情况。您希望范围是19-21、21-23等还是18-20、20-22等?18-20、20-22,这是从18-20开始的,19包括在其中。谢谢!这就是我要找的。
| AGE RANGE |    AVERAGE SALARY |
|-----------|-------------------|
|   18 - 20 | 8666.666666666666 |
|   19 - 21 |              8000 |
|   20 - 22 |              7500 |
|   21 - 23 | 6333.333333333333 |
|   22 - 24 |              7500 |
|   23 - 25 |              9000 |
|   24 - 26 |              9000 |
|   25 - 27 |            (null) |
|   26 - 28 |             22000 |
|   27 - 29 |             22000 |
|   28 - 30 |             22000 |