gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:52:58 28 4
gpt4 key购买 nike

所以我想创建一个查询,它将返回 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com