MySQL 具有特定值的 GROUP BY 并保持为 'other'
MySQL GROUP BY with specific values and remaining as 'other'
我在用户注册时有一个 how did you hear about us?
表单域。现在通过收集的数据,我试图找到每个选项的百分比。我遇到的问题是任何已填写 other
的用户,我无法使用 group by 方法,因为他们输入了不同的内容。我如何将选项中没有的任何内容分组为 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,你可以用window sum:
替换子查询
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
我在用户注册时有一个 how did you hear about us?
表单域。现在通过收集的数据,我试图找到每个选项的百分比。我遇到的问题是任何已填写 other
的用户,我无法使用 group by 方法,因为他们输入了不同的内容。我如何将选项中没有的任何内容分组为 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,你可以用window sum:
替换子查询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