成绩表A,总分100,以10分为一个分数段,统计各分数段的人数(PostgreSQL)

需求: 根据成绩表数据,以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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值