sql递归数组

64jmpszr  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(338)

有没有一种方法可以遍历范围来生成一个大查询?如果不是这样,我将不得不制作一个python脚本来执行所有可能的操作。
我需要计算拖欠者的平均工资,这取决于他们的年龄和工资范围。。。我只用一个就可以了,但是有没有一种方法可以同时完成整个大查询呢?
年龄:[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,…]
工资:[0,200],[201,500],[501,1000],[1001,1500],[1501,2000],[2001,2500],[2501,3000],[3001,3500],[3501,4000],[4001,5000],[5001,6000],[6001,10000],[10001,…]
我的下一个查询适用于年龄[30,40]和薪水[1500-2000]。

SELECT 
 (COUNT(*) * 100)/ (SELECT 
                    COUNT(*) 
                   FROM Client
                   WHERE (Age BETWEEN 30 AND 40) 
                   AND (Salary BETWEEN 1500 AND 2000)) AS percentage
FROM Client
WHERE (Age BETWEEN 30 AND 40)
AND (Salary BETWEEN 1500 AND 2000)
AND Defaulter = 1
GROUP BY Defaulter

结果是:

Defaulters->             68
Clients  at range->     114
percentage->             59

有没有办法让这一切一个接一个地发生n次?
谢谢您
编辑:

CREATE TABLE Client
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
Salary int,
Age int,
Defaulter int
);
nkcskrwz

nkcskrwz1#

创建一个包含最小和最大年龄列的表,以及另一个包含最小和最大工资的表。这些表可以是临时表或永久表。交叉连接他们和你的 Client 表,并引用查询中的“年龄”和“薪资”列,而不是当前使用的硬编码值。

rryofs0p

rryofs0p2#

不同服务器的sql语言各不相同,所以我把答案留给psuedo。
创建2个参考表。

Table Ages as (age_display varchar(20),age_start_range int, age_end_range int).  

Table salaries as (sal_display varchar(20), sal_start_range int, sal_end_range int)

在join语句中:

FROM Client c inner join ages a on c.age > age_start_range  and c.age < age_end_range
inner join salaries s on c.salary > sal_start_range and c.salary < sal_end_range

现在可以在select和group by语句中使用表中的“display”列。
如果不了解你的数据库,就不能再进一步了

相关问题