问题描述
嗨,
我有以下要求并寻求帮助以仅通过SQL实现此目的 (没有PL/SQL块)-
表A包含以下列-
1.员工身份
2.员工年龄
3.员工 _ 部门
最终用户需要提供以下3个提示值-
1.年龄上限 (例如18岁)
2.年龄下限 (例如55岁)
3.年龄差距 (例如7)
根据用户输入,SQL应该产生如下输出-
不应返回员工计数为0的记录。
如果需要任何进一步的信息,请告诉我。
请帮忙。
谢谢和问候,
Rituraj
我有以下要求并寻求帮助以仅通过SQL实现此目的 (没有PL/SQL块)-
表A包含以下列-
1.员工身份
2.员工年龄
3.员工 _ 部门
最终用户需要提供以下3个提示值-
1.年龄上限 (例如18岁)
2.年龄下限 (例如55岁)
3.年龄差距 (例如7)
根据用户输入,SQL应该产生如下输出-
Age Band Employee Count ------------------------------------------------------------ Under 18 8 18 - 24 11 25 - 31 11 32 - 38 15 39 - 45 14 46 - 52 15 53 - 54 4 55 Plus 71复制
不应返回员工计数为0的记录。
如果需要任何进一步的信息,请告诉我。
请帮忙。
谢谢和问候,
Rituraj
专家解答
将人分组在界外很容易。只需检查年龄是否小于较低或大于或等于较高。
这之间的一点变得有趣 :)
您可以通过以下方式执行此操作:
1减去员工年龄 (22-18) 的下界 = 4
2除以间隙值 (4/7 ) = 0.56...
3采用分区法 (floor (0.56... ) = 0
4将此备份乘以 (0*7) = 0
5将下限加回 (0 18) = 18
要找到上限,请重复该过程。但是在步骤3中计算的地板上加一个。并且,由于上限可能是整个组的一部分,因此请最少返回此计算和上限。然后从结果中减去一个。
将以上所有内容粘贴在一个案例表达式中。并按其结果分组以获得计数。
All that remains is to get the rows in the correct order. 您可以通过以下方式执行此操作:
映射下...至-1。而其他值为0。按组值排序,例如:
这给出了类似的东西:
PS-请告诉我您不在表格中存储年龄!你是根据储存的出生日期来计算的,对吗?而且您不雇用8岁的孩子吗?;)
这之间的一点变得有趣 :)
您可以通过以下方式执行此操作:
1减去员工年龄 (22-18) 的下界 = 4
2除以间隙值 (4/7 ) = 0.56...
3采用分区法 (floor (0.56... ) = 0
4将此备份乘以 (0*7) = 0
5将下限加回 (0 18) = 18
要找到上限,请重复该过程。但是在步骤3中计算的地板上加一个。并且,由于上限可能是整个组的一部分,因此请最少返回此计算和上限。然后从结果中减去一个。
将以上所有内容粘贴在一个案例表达式中。并按其结果分组以获得计数。
All that remains is to get the rows in the correct order. 您可以通过以下方式执行此操作:
映射下...至-1。而其他值为0。按组值排序,例如:
order by case when grp like 'U%' then -1 else 0 end, grp复制
这给出了类似的东西:
with bounds as ( select 18 lwr, 55 upr, 7 gap from dual ), grps as ( select a.*, case when employee_age < lwr then 'Under ' || lwr when employee_age >= upr then upr || ' Plus' else to_char ( ( floor ( ( employee_age - lwr ) / gap ) * gap ) + lwr ) || '-' || to_char ( least ( upr, ( ( floor ( ( employee_age - lwr ) / gap ) + 1 ) * gap ) + lwr ) - 1 ) end grp from a cross join bounds order by employee_age ) select grp, count (*), min ( employee_age ), max ( employee_age ) from grps group by grp order by case when grp like 'U%' then -1 else 0 end, grp; GRP COUNT(*) MIN(EMPLOYEE_AGE) MAX(EMPLOYEE_AGE) Under 18 8 12.5 17.5 18-24 11 18.5 24.5 25-31 11 25.5 31.5 32-38 15 32.25 38.5 39-45 14 39.5 45.5 46-52 15 46.25 52.5 53-54 4 53.5 54.5 55 Plus 71 55.5 100.5复制
PS-请告诉我您不在表格中存储年龄!你是根据储存的出生日期来计算的,对吗?而且您不雇用8岁的孩子吗?;)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。