mysql - 按不存在的值分组
Posted
技术标签:
【中文标题】mysql - 按不存在的值分组【英文标题】:mysql - group by a non-existent value 【发布时间】:2013-09-05 01:32:18 【问题描述】:是否可以按不存在进行分组(对不起,如果这不是正确的术语)。
例如,如果我有一个表格,例如:
post_id - 状态
1 - 活跃
2 - 暂停
3 - 保持
状态表的可能值有:活动、暂停、保持、删除
但状态列在任何给定时间可能有也可能没有所有这些状态类型,但我仍然希望返回一个计数为 0 的状态,即使它不在其中。
是否可以做一些事情,例如(伪查询):
SELECT COUNT(post_id), status(active,suspended,hold,deleted) FROM users GROUP BY status
附:在有人建议不要以这种方式制作表格之前,我别无选择,因为这是该 CMS 的属性表格的结构方式。
【问题讨论】:
您并使用合成数据对查询结果进行连接。例如。select coalesce(r.count, 0) as count, s.status from statuses as s left join that query as r on s.status = r.status
,其中 statuses 包含已分组的已知状态集。
我该怎么做?
您能否用几行示例数据和所需的输出来说明您的问题。也许只有我一个人,但我很难理解你真正追求的是什么。
同上@peterm,abd 为什么您尝试从用户表中进行选择?当然,这将是帖子表。你想按用户分组吗?请详细说明。
不管表名是什么,都是假表,数据简单,问题简单
【参考方案1】:
试试case
声明
SELECT SUM(CASE WHEN status = "active" THEN 1 ELSE 0 END) active_count,
SUM(CASE WHEN status = "suspended" THEN 1 ELSE 0 END) suspended_count,
SUM(CASE WHEN status = "hold" THEN 1 ELSE 0 END) hold_count,
SUM(CASE WHEN status = "deleted" THEN 1 ELSE 0 END) deleted_count
FROM posts;
还有这个
SELECT "active", SUM(CASE WHEN status = "active" THEN 1 ELSE 0 END) active_count
FROM posts
UNION
SELECT "suspended", SUM(CASE WHEN status = "suspended" THEN 1 ELSE 0 END) suspended_count
FROM posts
UNION
SELECT "hold", SUM(CASE WHEN status = "hold" THEN 1 ELSE 0 END) hold_count
FROM posts
UNION
SELECT "deleted", SUM(CASE WHEN status = "deleted" THEN 1 ELSE 0 END) deleted_count
FROM posts
更好
SELECT "active", COUNT(*) active_count
FROM posts WHERE status = "active"
UNION
SELECT "suspended", COUNT(*) suspended_count
FROM posts WHERE status = "suspended"
UNION
SELECT "hold", COUNT(*) hold_count
FROM posts WHERE status = "hold"
UNION
SELECT "deleted", COUNT(*) deleted_count
FROM posts WHERE status = "deleted"
见 SQL fiddle here
【讨论】:
【参考方案2】:我的查询是相同的,但在 Oracle 中。接下来做这项工作。
select * from (
select status from users
)
pivot (
count(status) as count
for status in ('active' as A, 'suspended' as S, 'hold' as H, 'deleted' as D)
);
致谢:Using pivot on multiple columns of an Oracle row
【讨论】:
以上是关于mysql - 按不存在的值分组的主要内容,如果未能解决你的问题,请参考以下文章
当存在 2 个分组条件时如何计算 mysql/sql 中的百分比
Mysql如果某个字段值存在则更新另一个字段的值为原值+100,命令应该如何写?