【发布时间】:2021-02-11 13:50:32
【问题描述】:
表:
CREATE TABLE companies (name VARCHAR(100) NOT NULL, number_of_employees INT NOT NULL, yearly_revenue DECIMAL(30, 2) NOT NULL);
INSERT INTO companies(name, number_of_employees, yearly_revenue) VALUES ('A', 5, 100), ('B', 5, 150), ('C', 15, 200), ('D', 25, 500), ('E', 25, 800);
如果我想计算公司,按员工人数分组,那么我可以编写这个查询:
SELECT
COUNT(*) AS count,
CASE
WHEN number_of_employees BETWEEN 0 AND 10 THEN '0-10'
WHEN number_of_employees BETWEEN 10 AND 20 THEN '10-20'
WHEN number_of_employees > 20 THEN '20-INF'
END AS number_of_employees
FROM companies
GROUP BY
CASE
WHEN number_of_employees BETWEEN 0 AND 10 THEN '0-10'
WHEN number_of_employees BETWEEN 10 AND 20 THEN '10-20'
WHEN number_of_employees > 20 THEN '20-INF'
END
它会输出:
count number_of_employees
------------------------------
2 0-10
1 10-20
2 20-INF
现在我的目标是在分组范围重叠时计算公司的数量。示例查询来说明我的目标:
SELECT
COUNT(*) AS count,
CASE
WHEN number_of_employees > 0 THEN '> 0'
WHEN number_of_employees > 10 THEN '> 10'
WHEN number_of_employees > 20 THEN '> 20'
END AS number_of_employees
FROM companies
GROUP BY
CASE
WHEN number_of_employees > 0 THEN '> 0'
WHEN number_of_employees > 10 THEN '> 10'
WHEN number_of_employees > 20 THEN '> 20'
END
它会输出:
count number_of_employees
------------------------------
5 > 0
但我想要的结果是这样的:
count number_of_employees
------------------------------
5 > 0
3 > 10
2 > 20
我应该如何做到这一点?
额外问题:除了COUNT(*),我还想知道其他聚合函数的答案,尤其是AVERAGE。
【问题讨论】:
-
请尽量避免将字符串插入数字列。您将年收入定义为
DECIMAL(30,2),然后插入值,例如'100',它们是字符串...