mysql 计算占比
时间: 2023-06-30 17:22:53 浏览: 237
要计算 MySQL 中某列数据的占比,可以使用以下 SQL 语句:
```
SELECT column_name, COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() AS percentage
FROM table_name
GROUP BY column_name
```
其中,`column_name` 是需要计算占比的列名,`table_name` 是需要查询的表名。这条 SQL 语句会对每个不同的 `column_name` 分组,计算出该组中的记录数占总记录数的百分比。最后返回两列数据:`column_name` 和 `percentage`,前者表示分组的列名,后者表示占比。
需要注意的是,`SUM(COUNT(*)) OVER()` 这一部分是用来计算总记录数的,它会在整个查询过程中只计算一次。`COUNT(*)` 是统计每个分组中的记录数,`* 100.0 /` 是将记录数转化为百分比。
相关问题
mysql计算一个表内按姓名分组,计算购买总数量,并计算占总销售数据占比
可以回答这个问题。可以使用如下的 SQL 语句来实现:
SELECT name, SUM(quantity) AS total_quantity, SUM(quantity) / (SELECT SUM(quantity) FROM table_name) AS percentage
FROM table_name
GROUP BY name;
其中,table_name 是你要计算的表的名称,name 是你要按照其进行分组的字段,quantity 是你要计算的数量字段。这个 SQL 语句会计算每个姓名对应的购买总数量,并且计算其占总销售数据的比例。
mysql计算班级成绩等级等于A B C的占比
可以通过以下SQL语句来计算班级成绩等级等于A、B、C的占比:
```
SELECT
CONCAT(
ROUND(SUM(CASE WHEN grade >= 90 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2), '% A, ',
ROUND(SUM(CASE WHEN grade >= 80 AND grade < 90 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2), '% B, ',
ROUND(SUM(CASE WHEN grade >= 70 AND grade < 80 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2), '% C'
) AS percentage
FROM
scores
WHERE
class = '班级名称';
```
其中,假设成绩表为`scores`,成绩字段为`grade`,班级字段为`class`。以上代码中会根据班级名称来计算班级成绩等级等于A、B、C的占比,并且输出结果的格式为`x.xx% A, x.xx% B, x.xx% C`。
阅读全文