mysql - 列出用户类型及其数量和百分比

标签 mysql

我有一个'users'表:

user_id | prov_platform   | first_name   | last_name
--------|-----------------|--------------|-------------------
1       | Facebook        | Joe          | Bloggs
2       | Facebook        | Sue          | Barker
3       |                 | John         | Doe
4       | Twitter         | John         | Terry
5       | Google          | Angelina     | Jolie

我最初想返回用户表中所有不同社交平台类型的列表,每个类型旁边都有计数 - 所以我想出了这个:

SELECT
IFNULL(prov_platform, 'Other') AS prov_platform, 
COUNT(*) AS platform_total
FROM users
GROUP BY prov_platform
ORDER BY platform_total DESC

结果是这样的:

prov_platform  | platform_total
---------------|-----------------
Facebook       | 2
Twitter        | 1
Google         | 1
Other          | 1

但我现在想向此查询添加另外几个字段; “allround_total”和“百分比”。因此,上面的记录集将变为:

prov_platform  | platform_total | allround_total | percentage
---------------|----------------|----------------|---------------
Facebook       | 2              | 5              | 40%
Twitter        | 1              | 5              | 20%
Google         | 1              | 5              | 20%
Other          | 1              | 5              | 20%

这是我在陷入困惑之前所得到的:

SELECT
    u.prov_platform, 
    COUNT(*) AS platform_total,
    allround_total,
    allround_total/platform_total*100 AS percentage
FROM
    users AS u
INNER JOIN (
           SELECT COUNT(*) AS allround_total FROM users
           ) AS allround_total
GROUP BY
    prov_platform
ORDER BY
    platform_total DESC

这会返回“allround_total”字段,该字段可以工作,但不知道它的性能如何。我无法锻炼的是如何让百分比正常工作。目前,上述查询返回错误:

Unknown column 'platform_total' in 'field list'

我想我已经很接近了,我只需要一个非常感谢的插入。

最佳答案

您不能在定义的同一级别中使用列别名。我还认为您已经计算了向后的百分比。

SELECT u.prov_platform, COUNT(*) AS platform_total,
       const.allround_total,
       100*count(*)/const.allround_total AS percentage
FROM users u cross join
     (SELECT COUNT(*) as allround_total FROM users
     ) const
GROUP BY prov_platform
ORDER BY platform_total DESC;

我将连接内部连接更改为交叉连接。尽管 MySQL 允许所有连接都缺少 on 子句,但我发现看到没有 oninner join 会令人不安。同样,我将表别名的名称更改为与列别名不同的名称,以使查询更易于阅读。

关于mysql - 列出用户类型及其数量和百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674135/

相关文章:

mysql - 无法将 mysql 连接到 Grails 3 应用程序

MySQL只显示特定字段的第一行

MySQL Connector/J v5.x 升级 : query now returning byte[] instead of String

sql - 何时在 ORM 中使用复合主键模型进行 INSERT 或 UPDATE?

Mysql - 应用于字符串的关系运算符

MySQL 使用 join 对多个表中的行进行计数

php - 使用 FK 在表中插入图像的目录路径 [MySQL]

php - 如何在php中添加用户角色

mysql - Mailchimp 从 mailchimp 更新到 mysql

mysql - 如何在sql查询中识别客户和供应商