【发布时间】:2023-03-12 07:21:01
【问题描述】:
查询结果如下:
b_id| l_id | result | Count | avg
-----+------+--------- -+-------+-----
1 | 10 | Limited | 2 | 66.66
1 | 10 |Significant| 1 | 33.33
2 | 09 | Critical | 1 |100.00
我正在努力使用下面的 case 语句来正确查询:
SELECT DISTINCT ON (b_id, l_id) b_id, l_id,
(CASE
WHEN result = 'Critical' THEN 'Critical'
WHEN result = 'Significant' AND avg >= 50 THEN 'Critical'
WHEN result = 'Significant' AND result <> 'Critical' THEN 'Significant'
WHEN result = 'Medium' AND avg >= 50 THEN 'Medium'
ELSE 'Limited' END) as cr
From (sub query)
我得到的结果如下:
b_id| l_id | result
-----+------+----------
1 | 10 | Limited
2 | 09 | Critical
但我的期望如下:
b_id| l_id | result
-----+------+----------
1 | 10 | significant
2 | 09 | Critical
1)。如果至少有 1 个临界值,那么临界值。 2)当有显着=> 50%并且没有关键然后关键(这意味着如果只有1行并且很重要所以它是100%然后'关键') 3) 如果至少有 1 项显着,则没有严重且(中等,有限)> 显着,则显着 4) 如果中等 >= 50% 并且没有(关键或显着),则中等 5) 休息时间有限。
我需要显着而不是有限,因为在大多数情况下,最高值胜过较低值,因此 Sig 胜过有限公司。总体而言,我希望案例陈述评估对组 (b_id,l_id),因此在对组中 1 | 10 我需要 case 语句来评估并返回结果。
【问题讨论】:
-
这有点自相矛盾:
WHEN result = 'Significant' AND result <> 'Critical' -
我不清楚您期望
Significant而不是Limited的逻辑。 -
对不起,我会把我的案例陈述清楚。
-
DISTINCT ON没有ORDER BY是没有意义的。 -
对不起,我会把我的案例陈述清楚。 1)。如果至少有 1 个临界值,那么临界值。 2) 当有显着性 => 50 % 并且没有关键性时,那么关键性(这意味着如果只有 1 行并且那是显着的,所以它是 100% 然后是“关键性”),3) 如果至少有 1 个显着性,则没有关键性和(中等,有限)>显着然后显着。 4) 如果中等 >= 50% 并且没有(关键或重要),则中等,5) 休息将受到限制。
标签: sql postgresql postgresql-9.1