我编了一个奇怪的例子来说明我想要做什么(这有点愚蠢,但请耐心等待):
考虑下表:
雇员
已婚、认证和宗教只是布尔字段(在 Oracle 的情况下,它们的类型为 NUMBER(1,0))。
我需要提出 SQL 来显示每个hire_year、已婚、持证和宗教雇员在以下工资类别中的数量:
- 一个
SALARY > 2000
- 乙
SALARY BETWEEN 1000 AND 2000
- C
SALARY < 1000
基于上面的数据集,这是我期望得到的:
到目前为止,我只提出了以下 SQL:
SELECT
COUNT(CASE WHEN married = 1 THEN 1 END) as MARRIED,
COUNT(CASE WHEN certified = 1 THEN 1 END) as certified,
COUNT(CASE WHEN religious = 1 THEN 1 END) as religious,
hire_year
FROM employees
GROUP BY hire_year;
执行此 SQL 的结果是:
这几乎是我所需要的,但我还需要根据工资范围将这些计数器进一步细分。
我想一些分析函数,根据一些 SQL 表达式将组划分为桶会有所帮助,但我不知道是哪一个。我尝试使用NTILE,但它需要一个正常量作为参数,而不是 SQL 表达式(例如SALARY BETWEEN X and Y
)。