mysql - 使用 MySQL 的列组的百分比总计

标签 mysql

如果我有一个包含以下内容的表格:

+---------+-------------+
| Country | campaign_id |
+---------+-------------+
| US      |           1 |
| FR      |           1 |
| FR      |           1 |
| UK      |           1 |
| NL      |           2 |
| DE      |           2 |
+---------+-------------+

如何像这样返回每个国家/地区的百分比:

+---------+------------+
| Country | Percentage |
+---------+------------+
| US      | 25         |
| FR      | 50         |
| UK      | 25         |
+---------+------------+

这是我目前为止所做的:

SELECT country FROM campaigns WHERE campaign_id = 1

请注意,如果更容易,返回 0.25 也是可以的。

最佳答案

编写一个子查询以获取事件中的总行数,然后将其除以按国家/地区分组的行数。

SELECT a.country, ROUND(100 * COUNT(*)/b.total, 2) AS percentage
FROM yourTable AS a
CROSS JOIN (
  SELECT COUNT(*) AS total
  FROM yourTable
  WHERE campaign_id = 1) AS b
WHERE a.campaign_id = 1
GROUP BY a.country

DEMO

关于mysql - 使用 MySQL 的列组的百分比总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678467/

相关文章:

c# - 查询表达式 ""中的语法错误(缺少运算符)

mysql - 使用 where 和 group by 选择具有最小列值的行

php - 从列表元素运行 php

php - laravel 获取文章编号

javascript - 动态行增加了 Mysql 问题

mysql - 从另一个表mysql查询将值插入到表中

php - mySQL:知道何时更新和何时插入?

mysql - 如何从mysql中的字符串中获取子字符串

php - SQL 查询在 CodeIgniter 中不起作用?

mysql - 返回仅具有一个特定的多对多关系的记录