对于这个问题我有一个棘手的问题。首先是代码:

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

我在干什么?
例如,我正在统计警方对不同类型用户的抢劫报告。在我的示例中,“admin”用户报告了6起代码为“2”(抢劫)的事件,等等,如“where”子句中所示(事件必须是抢劫,也是代码2)。
这将产生以下结果:
+-----------------------+----------+
| user_type_description | Quantity |
+-----------------------+----------+
| Admin                 |        6 |
| Moderator             |        8 |
| Fully_registered_user |        8 |
| anonymous_user        |        9 |
+-----------------------+----------+

基本上Admin,Moderator and Fully_registered_user都是appropriately registered users。我需要将它们添加到一个结果中,结果显示如下:
+--------------+------------+
| Proper_users | Anonymous  |
+--------------+------------+
|           22 |          9 |
+--------------+------------+

我不擅长sql。如有任何帮助,我们将不胜感激。谢谢。

最佳答案

您可以尝试使用基于当前结果集的条件聚合函数。
SUMCASE WHEN表达式。

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

10-01 23:22
查看更多