Mysql 查询:我有4行,需要将3行的结果添加到一行中,并保留最后一行不变
对于这个问题,我有一个棘手的问题。首先是守则:Mysql 查询:我有4行,需要将3行的结果添加到一行中,并保留最后一行不变,mysql,sql,rows,Mysql,Sql,Rows,对于这个问题,我有一个棘手的问题。首先是守则: SELECT user_type.user_type_description,COUNT(incident.user_id) as Quantity FROM incident INNER JOIN user ON incident.user_id=user.user_id INNER JOIN user_type ON user.user_type=user_type.user_type WHERE incident.code=2 GROUP B
SELECT user_type.user_type_description,COUNT(incident.user_id) as Quantity
FROM incident
INNER JOIN user ON incident.user_id=user.user_id
INNER JOIN user_type ON user.user_type=user_type.user_type
WHERE incident.code=2
GROUP BY user.user_type
我在干什么
举个例子,我正在统计警方对不同类型用户的抢劫报告。在我的示例中,管理员用户报告了6起代码2抢劫等事件,如“where”子句中所示,事件必须是抢劫,也是代码2
这将产生以下结果:
+-----------------------+----------+
| user_type_description | Quantity |
+-----------------------+----------+
| Admin | 6 |
| Moderator | 8 |
| Fully_registered_user | 8 |
| anonymous_user | 9 |
+-----------------------+----------+
基本上,管理员、版主和完全注册的用户都是适当注册的用户。我需要将它们添加到结果中,结果显示如下:
+--------------+------------+
| Proper_users | Anonymous |
+--------------+------------+
| 22 | 9 |
+--------------+------------+
我不擅长sql。感谢您的帮助。谢谢。我会用a来解决它,但最好将此关联放在一个表中
WITH
user_type_categories
AS
(
SELECT 'Admin' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'Moderator' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'Fully_registered_user' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'anonymous_user' AS [user_type_description] , 'Anonymous' AS [user_type_category]
)
SELECT
CASE WHEN utc.[user_type_category] = 'Proper_users' THEN
SUM(incident.user_id)
END AS [Proper_Users_Quantity]
, CASE WHEN utc.[user_type_category] = 'Anonymous' THEN
SUM(incident.user_id)
END AS [Anonymous_Quantity]
FROM
[incident]
INNER JOIN [user] ON [incident].[user_id] = [user].[user_id]
INNER JOIN [user_type] ON [user].[user_type] = [user_type].[user_type]
LEFT JOIN user_type_categories AS utc ON utc.[user_type_description] = [user_type].[user_type_description]
WHERE
[incident].[code] = 2
我可以用一个表来解决它,但最好将这个关联放在一个表中
WITH
user_type_categories
AS
(
SELECT 'Admin' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'Moderator' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'Fully_registered_user' AS [user_type_description] , 'Proper_users' AS [user_type_category]
UNION SELECT 'anonymous_user' AS [user_type_description] , 'Anonymous' AS [user_type_category]
)
SELECT
CASE WHEN utc.[user_type_category] = 'Proper_users' THEN
SUM(incident.user_id)
END AS [Proper_Users_Quantity]
, CASE WHEN utc.[user_type_category] = 'Anonymous' THEN
SUM(incident.user_id)
END AS [Anonymous_Quantity]
FROM
[incident]
INNER JOIN [user] ON [incident].[user_id] = [user].[user_id]
INNER JOIN [user_type] ON [user].[user_type] = [user_type].[user_type]
LEFT JOIN user_type_categories AS utc ON utc.[user_type_description] = [user_type].[user_type_description]
WHERE
[incident].[code] = 2
您可以尝试基于当前结果集使用条件聚合函数 表达式时用大小写求和
SELECT SUM(CASE WHEN user_type_description IN ('Admin','Moderator','Fully_registered_user') THEN Quantity END) Proper_users,
SUM(CASE WHEN user_type_description = 'anonymous_user' THEN Quantity END) Anonymous
FROM (
SELECT user_type.user_type_description,COUNT(incident.user_id) as Quantity
FROM incident
INNER JOIN user ON incident.user_id=user.user_id
INNER JOIN user_type ON user.user_type=user_type.user_type
WHERE incident.code=2
GROUP BY user.user_type
) t1
您可以尝试基于当前结果集使用条件聚合函数 表达式时用大小写求和
SELECT SUM(CASE WHEN user_type_description IN ('Admin','Moderator','Fully_registered_user') THEN Quantity END) Proper_users,
SUM(CASE WHEN user_type_description = 'anonymous_user' THEN Quantity END) Anonymous
FROM (
SELECT user_type.user_type_description,COUNT(incident.user_id) as Quantity
FROM incident
INNER JOIN user ON incident.user_id=user.user_id
INNER JOIN user_type ON user.user_type=user_type.user_type
WHERE incident.code=2
GROUP BY user.user_type
) t1
您只需要条件聚合:
SELECT SUM( ut.user_type_description IN ('Admin', 'Moderator', 'Fully_registered_user') ) as Proper_users,
SUM( ut.user_type_description IN ('anonymous_user') as anonymous
FROM incident i INNER JOIN
user u
ON i.user_id = u.user_id INNER JOIN
user_type ut
ON u.user_type = ut.user_type
WHERE i.code = 2;
注:
表别名使查询更易于编写和读取。
这使用了一个MySQL快捷方式来添加值——只需添加booelean表达式。
您只需要条件聚合:
SELECT SUM( ut.user_type_description IN ('Admin', 'Moderator', 'Fully_registered_user') ) as Proper_users,
SUM( ut.user_type_description IN ('anonymous_user') as anonymous
FROM incident i INNER JOIN
user u
ON i.user_id = u.user_id INNER JOIN
user_type ut
ON u.user_type = ut.user_type
WHERE i.code = 2;
注:
表别名使查询更易于编写和读取。
这使用了一个MySQL快捷方式来添加值——只需添加booelean表达式。
用格式化表格显示示例数据和预期结果。。你可以使用和你的小组是奇怪的。。您选择的use user\U type.user\U type\U description但是您的group by user.user\U type我使用了您的链接,但是stackoverflow只是省略了空格。是的,我按用户类型分组,这是一个数字。0=管理员1=模块2=完全注册用户3=匿名。用户类型描述包含这些数字的文本描述。如果不显示示例数据,我就听不懂。好的!我想一下。我正在统计警方关于抢劫的报告,这些报告来自不同类型的用户。在我的示例中,管理员用户报告了6起代码2抢劫等事件,如“where”子句中所示,事件必须是抢劫,代码2希望这会有所帮助。将其放在您的问题上以提供更多信息..用格式化的表格显示示例数据和预期结果。。你可以使用和你的小组是奇怪的。。您选择的use user\U type.user\U type\U description但是您的group by user.user\U type我使用了您的链接,但是stackoverflow只是省略了空格。是的,我按用户类型分组,这是一个数字。0=管理员1=模块2=完全注册用户3=匿名。用户类型描述包含这些数字的文本描述。如果不显示示例数据,我就听不懂。好的!我想一下。我正在统计警方关于抢劫的报告,这些报告来自不同类型的用户。在我的示例中,管理员用户报告了6起代码2抢劫等事件,如“where”子句中所示,事件必须是抢劫,代码2也希望能有所帮助。将其放在您的问题上,以提供更多信息..天哪,鳄梨酱。我不允许写这个代码,但我会注意这个解决方案。神圣的鳄梨酱。我不允许输入此代码,但我会注意此解决方案。