sql 分区间统计

SELECT
-- 返回字符串
ELT(
-- 划分区间
INTERVAL (student.score, 0, 60, 90, 100),
"1-60",
"61-90",
"91-100",
"101-"
) AS level,
count(*) / (
SELECT
count(DISTINCT(A.`name`))
FROM
A
) AS per
FROM
(
SELECT
a.`name` AS `name`,
sum(a.score * b.weight) AS score
FROM
A,
B
WHERE
A.`subject` = b.`subject`
GROUP BY
a.`name`
) student
GROUP BY
ELT(
INTERVAL (student.score, 0, 60, 90, 100),
"1-60",
"61-90",
"91-100",
"101-"
);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

版本2

SELECT
-- 返回字符串
(
CASE
WHEN student.score >= 0
AND student.score < 60 THEN
"0~59"
WHEN student.score >= 60
AND student.score < 90 THEN
"60~89"
WHEN student.score >= 90
AND student.score < 100 THEN
"90~99"
ELSE
"100+"
END
) AS LEVEL,
(
count(*) / (
SELECT
count(DISTINCT(A.`name`))
FROM
A
)
) AS per
FROM
(
SELECT
a.`name` AS `name`,
sum(a.score * b.weight) AS score
FROM
A,
B
WHERE
A.`subject` = b.`subject`
GROUP BY
a.`name`
) student
GROUP BY
(
CASE
WHEN student.score >= 0
AND student.score < 60 THEN
"0~59"
WHEN student.score >= 60
AND student.score < 90 THEN
"60~89"
WHEN student.score >= 90
AND student.score < 100 THEN
"90~99"
ELSE
"100+"
END
);

TODO 使用函数解决问题

猜你喜欢

转载自www.cnblogs.com/cococc/p/12121366.html