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 使用函數解決問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM