mysql - MySQL GROUP BY 具有特定值并保留为“其他”
问题描述
用户注册时我有一个how did you hear about us?
表单字段。现在通过收集的数据,我试图找到每个选项的百分比。我遇到的问题是任何已填写的用户other
,我不能按方法使用分组,因为他们输入了不同的内容。我如何按选项中没有的任何内容分组other
?
user | how_heard
user1 | facebook
user2 | youtube
user3 | facebook
user4 | instagram
user5 | advert
user6 | facebook
user7 | browsing the internet
user8 | promotional tag
user9 | university recommended me
最后三个用户,应分组为other
。我该怎么做呢?
这是我的查询,它有效,但不适用于输入的值other
。
SELECT ma.how_heard
, COUNT(1) AS total
, COUNT(1) / t.cnt * 100 AS `percentage`
FROM users ma
CROSS
JOIN (SELECT COUNT(1) AS cnt FROM users) t
GROUP
BY ma.how_heard
, t.cnt
解决方案
您可以使用case
表达式:
SELECT
CASE WHEN u.how_heard IN ('facebook', 'youtube', 'instagram', 'advert')
THEN u.how_heard
ELSE 'other'
END as how_heard_new,
COUNT(*) AS total,
COUNT(*) / t.cnt * 100 AS `percentage`
FROM users u
CROSS JOIN (SELECT COUNT(*) AS cnt FROM users) t
GROUP BY how_heard_new, t.cnt
请注意,如果您运行的是 MySQL 8.0,则可以将子查询替换为窗口总和:
SELECT
CASE WHEN u.how_heard IN ('facebook', 'youtube', 'instagram', 'advert')
THEN u.how_heard
ELSE 'other'
END as how_heard_new,
COUNT(*) AS total,
COUNT(*) / SUM(COUNT(*)) OVER() * 100 AS `percentage`
FROM users u
GROUP BY how_heard_new
推荐阅读
- python - 使用 arange 进行绘图以定义变量
- python - Plotly-Dash:如何在字典中的多个数据框中的多个列之间进行选择?
- javascript - 使用 JavaScript 在每列的数组中查找连续重复的数字
- django - 不允许使用 NULL 的 Django 表单更新失败
- powershell - PowerShell 远程会话
- python - 模型中外键的多个对象实例
- linkedin - No-Access-Control-Allow-Origin 用于授权令牌,但 URL 已设置
- javascript - 事件目标不正确
- r - blogdown::serve_site,复制静态文件时出错
- javascript - 通过单击链接打开和关闭 div 并通过 X 按钮关闭