SQL 查询以计算 3 种不同条件下的行数

标签 sql postgresql select count group-by

所以我想创建一个查询,它将返回 projects 的名称和 assigments 的数量,特别是与 project 相关严重性。例如:表 assignment 包含:

 id  |                name                 | project_id  | severity  | 
-----+-------------------------------------+-------------+-----------+
 148 | Create background                   |         1   |          1|  
 184 | Create frontend                     |         1   |          1|  
 151 | Create Budged                       |         1   |          2|  
 155 | Assign all tasks                    |         1   |          3|    
 179 | Drink Beer                          |         1   |          1|   

project仅包含nameid如下:

 id  |                name                 
-----+-------------------------------------
 1   | Very Important Project

我想创建一个将返回如下内容的查询:

projectid   |  projectname          | CriticalAssig| MediumAssig | LowAssig
------------+-----------------------+--------------+-------------+----------

目前这对我有用:

SELECT p.id, 
       p.name, 
       Count(a1.id)  AS one, 
       Count(a2.id)  AS two, 
       Count (a3.id) AS three 
FROM   project p 
       INNER JOIN assign a1 
               ON a1.project_id = p.id 
       INNER JOIN assign a2 
               ON a2.project_id = p.id 
       INNER JOIN assign a3 
               ON a3.project_id = p.id 
WHERE  a2.severity = '2' 
       AND a1.severity = '1' 
       AND a3.severity = '3' 
GROUP  BY p.id, 
          p.name; 

但是这个查询的结果在 onetwothree 列中是荒谬的,我得到像 90000 这样的数字(到处都是相同的数字)而简单查询 select count(*) from assig where project_id=x 返回 300

谁能指出我的错误所在?

最佳答案

你可以在没有任何连接的情况下做到这一点:

count(case when severity = 1 then 1 else null end) as one

(您当前查询中的问题是您在分组之前乘以行数。在开发聚合时,在没有聚合函数调用和分组依据/具有子句的情况下运行查询,以查看您实际计算的是什么、求和等)

关于SQL 查询以计算 3 种不同条件下的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836432/

相关文章:

php - echo bootstrap modal on php中的点击功能并提交数据

linux - 无法连接到服务器 : postgresql on ubuntu in windows subsystem for linux

python - 未绑定(bind)本地错误 : local variable 'rows' referenced before assignment

java - 事务在使用 OpenJPA 时处于非 Activity 状态

mysql - 选择数据库的最新/最新添加

mysql - 返回单行子查询的更新语句返回多行

c# - C# 字符串中的 SQL 语法错误

php - 使用 USING 和 WHERE AND OR 选择左连接

mysql - 根据mysql中的下一行选择行

MySQL 将多列选择为一列