【问题标题】:SQL query to display Count of records based in range from another tableSQL查询显示基于另一个表范围内的记录计数
【发布时间】:2020-05-31 15:58:37
【问题描述】:

我有两张桌子RangeEmployee

Range 表由列组成

minimum_salary, maximum salary, program

(该薪水的可用计划,例如白金和白银等)。

Employee 表有列

Emp_Id, Emp_Name, Salary

https://i.stack.imgur.com/RKaXP.png

我想编写一个 SQL 查询,以获取范围表中低于给定工资范围的员工数量,请参阅截图以获取表格和结果集。

感谢任何帮助。谢谢

【问题讨论】:

  • 您已经命名了三个版本的 SQL - 它是哪一个。您能否也请展示您迄今为止尝试过的内容,否则很难为您提供帮助。
  • 如何处理范围的端点? (包括或不包括)例如,程序“XYZ”的工资范围是从 $20,000 到 $30,000。薪水正好为 20,000 美元的人是否有资格参加该计划? 30,000美元的薪水怎么样? (如果你对两者都回答“是”,那很可能是错误的。如果程序 'ABC' 的范围在 30,000 美元到 50,000 美元之间,那么薪水正好为 30,000 美元的某人有资格参加这两个程序,但薪水为 29,999.99 美元或 30,000.01 美元的人则没有;那不可能)
  • 另外 - 范围是否可以是开放式的(例如,“所有低于 20,000 美元的工资”或“所有高于 60,000 美元的工资”),或者它们是否都有非null 的最低工资和非-null最高工资?

标签: sql sql-server join group-by count


【解决方案1】:

您可以在不等式条件下加入:

select r.program, count(e.emp_id) no_employees
from ranges r
left join employees e on e.salary between r.min_salary and r.max_salary
group by r.program

【讨论】:

  • 这假定范围在两端都包含在内。在现实生活中,这是非常不可能的。我只是要求 OP 澄清一下。
  • @mathguy:是的,我是这么说的,因为这就是 OP 的示例数据所显示的......
  • 大声笑 - 好的,我现在看到了范围(我从不关注帖子中的链接)。薪水可能是一个整数,所以他们可以这样做。
【解决方案2】:

请在Range 表中添加一个名为Emp_ID 的列。因为,它有助于加入两个表。我的意思是需要主键和外键。

查询:

select COUNT(e.empID), r.program
FROM rangeTable AS r
INNER JOIN empTable AS e ON e.salary BETWEEN r.min_salary AND r.max_salary
GROUP BY r.program

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多