成績表A,總分100,以10分為一個分數段,統計各分數段的人數(PostgreSQL)
阿新 • • 發佈:2018-12-25
需求: 根據成績表資料,以10分為一個分數段,成績進行分段統計
思路:1.對成績除10,然後向下取整,得到區間分組值;
2.根據區間分組值進行分組統計;
PostgreSQL程式碼如下:
1.建立表A,並且插入值
sql
CREATE TABLE A(
name VARCHAR,
grade float
)
INSERT INTO a VALUES ('a', 90);
INSERT INTO a VALUES ('b', 93);
INSERT INTO a VALUES ('c', 70);
INSERT INTO a VALUES ('d' , 80);
INSERT INTO a VALUES ('d', 10);
INSERT INTO a VALUES ('d', 8);
INSERT INTO a VALUES ('d', 100);
INSERT INTO a VALUES ('d', 0);
2.查看錶資料
SELECT * from a ;
postgres=# SELECT * from a ;
+——+——-+
| name | grade |
+——+——-+
| a | 90 |
| b | 93 |
| c | 70 |
| d | 80 |
| d | 10 |
| d | 8 |
| d | 100 |
| d | 0 |
+——+——-+
8 rows in set
3.先對資料進行除10向下取整操作
SELECT
t.con, count (*)
FROM
(
SELECT
floor((A .grade / 10)) AS con
FROM
A
) T
GROUP BY
T .con;
+—–+——-+
| con | count |
+—–+——-+
| 0 | 2 |
| 1 | 1 |
| 9 | 2 |
| 10 | 1 |
| 7 | 1 |
| 8 | 1 |
+—–+——-+
6 rows in set
在對處理資料進行統計
SELECT
(
(T .con * 10) || '-' || ((T .con + 1) * 10 - 1)
) AS "分數段",
COUNT (*) AS "人數"
FROM
(
SELECT
FLOOR ((A .grade / 10)) AS con
FROM
A
) T
GROUP BY
T .con
+———+——+
| 分數段 | 人數 |
+———+——+
| 0-9 | 2 |
| 10-19 | 1 |
| 90-99 | 2 |
| 100-109 | 1 |
| 70-79 | 1 |
| 80-89 | 1 |
+———+——+
6 rows in set