Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql-按不存在的值分组_Mysql_Sql_Properties_Group By - Fatal编程技术网

mysql-按不存在的值分组

mysql-按不存在的值分组,mysql,sql,properties,group-by,Mysql,Sql,Properties,Group By,是否可以按“不存在”分组(如果这不是正确的术语,请抱歉) 例如,如果我有一个表,例如: post_id-状态 1-主动 2-暂停 3-暂停 状态表的可能值为:活动、暂停、保持、删除 但是status列在任何给定时间都可能有或可能没有所有这些状态类型,但是我仍然希望返回一个计数为0的状态,即使它不在其中 是否可以执行以下操作(伪查询): 按状态从用户组中选择计数(post_id)、状态(活动、暂停、保留、删除) 注意:在任何人建议不这样做之前,我没有选择,因为这是这个CMS的属性表的结构。Tryc

是否可以按“不存在”分组(如果这不是正确的术语,请抱歉)

例如,如果我有一个表,例如:

post_id-状态

1-主动

2-暂停

3-暂停

状态表的可能值为:活动、暂停、保持、删除

但是status列在任何给定时间都可能有或可能没有所有这些状态类型,但是我仍然希望返回一个计数为0的状态,即使它不在其中

是否可以执行以下操作(伪查询):

按状态从用户组中选择计数(post_id)、状态(活动、暂停、保留、删除)


注意:在任何人建议不这样做之前,我没有选择,因为这是这个CMS的属性表的结构。

Try
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 FIDLE

Try
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,我的查询与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)
);

信用证:

我的查询与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)
);

积分:

您可以使用合成数据对查询结果进行连接。例如,
选择coalesce(r.count,0)作为count,s.status from statuses as s left join{that query}作为r on s.status=r.status
,其中statuses包含分组的已知状态集。我该怎么做?你能用几行样本数据和所需的输出来说明你的问题吗。也许只是我,但我很难理解你真正想要的是什么。同上@peterm,abd为什么你要从用户表中选择?当然,这将是posts表。是否要按用户分组?请详细说明。不管表名是什么,这是一个包含简单数据的假表,用于简化问题,并使用合成数据连接查询结果。例如,
选择coalesce(r.count,0)作为count,s.status from statuses as s left join{that query}作为r on s.status=r.status
,其中statuses包含分组的已知状态集。我该怎么做?你能用几行样本数据和所需的输出来说明你的问题吗。也许只是我,但我很难理解你真正想要的是什么。同上@peterm,abd为什么你要从用户表中选择?当然,这将是posts表。是否要按用户分组?请详细说明。不管表名是什么,这是一个带有简单数据的假表,以简化问题