MySQL通过分组计算百分比

  公司在做柯米克的分析报告,需要我这边把汽车之家柯米克论坛的评论数据和评论用户所在地的数据获取,通过爬虫的方式很快的解决了数据的问题,但是需要我提取下各省评论人数的比例,所以在数据库里面直接计算了相关的比例,把结果提交了,在这里记录下这个实现的方式。

下面看下评论用户取数据的表结构

但是获取的用户位置数据是adcode,这里还需要关联下adcode 码表,adcode码表数据结构(部分数据的截图);

1.首先我们需要把码表和用户表通过adcode关联起来,这样我们才知道具体的省份;

2.我们需要通过分组的方式获取到每个省份的通过人数有多少人;

3.然后再去计算各省人数的比例;

SELECT
    CONCAT(
        ROUND(
            t1.total / t2.totalCount * 100,
            2
        ),
        '%'
    ) AS 各省人数百分比
FROM
    (
        SELECT
            count(U.user_pid) AS total,
            D. NAME,
            U.user_pid
        FROM
            auto_home_user AS U
        INNER JOIN dict_city AS D ON D.id = U.user_pid
        GROUP BY
            user_pid
    ) t1,
    (
        SELECT
            count(*) AS totalCount
        FROM
            auto_home_user
    ) t2 

这里主要用到两个SQL的函数 ROUND和CONCAT,其他的都是比较常用的函数和语法

ROUND 主要是截取数值的小数位置,这里我保留了2位小时;

SELECT ROUND(19.8883434,2);

运行结果

CONCAT 主要用户字符串的连接,这里与ORACLE 需要做下区别,Oracle 通过 || 关联;

语法:

CONCAT(str1,str2,...)  # str1,str2,.... 代表多个字符串

示例:

SELECT CONCAT("Hello","World")

结果:

这里特殊在多介绍一个方法,通过指定的分隔符连接字符串CONCAT_WS

语法:

CONCAT_WS(separator,str1,str2,...)  # separator 指分隔符,str1,str2,.... 代表多个字符串

示例:

SELECT CONCAT_WS(",","Hello","World") AS 字符串链接;

结果:

原文地址:https://www.cnblogs.com/mengyu/p/9398838.html