kann ich einen Fall nach der WHERE-Klausel verwenden. unten ist meine Abfrage.distinct und Fall innerhalb WHERE-Klausel
Danke,
select unit_id, law_id, risk, count(risk) as crr
from schema.table1
group by unit_id, law_id, risk
order by crr desc, risk desc
Ergebnisse
unit_id |law_id | risk | crr
----------------------------------
| 1 | 3 |Significant| 3
| 1 | 3 |Limited | 3
| 3 | 2 |Significant| 1
| 1 | 1 |Significant| 1
| 2 | 2 |Medium | 1
| 1 | 3 |Critical | 1
und wenn ich sie Rang
select unit_id, law_id, a.risk,
rank() OVER (PARTITION BY unit_id, law_id ORDER BY crr DESC, risk DESC) as rank
from (select unit_id, law_id, risk, count(risk) as crr
from schema.table1
group by unit_id, law_id, risk
order by crr desc, risk desc
) a
Ergebnisse
unit_id |law_id | risk | rank
----------------------------------
| 1 | 1 |Significant| 1
| 1 | 3 |Significant| 1
| 1 | 3 |Limited | 2
| 1 | 3 |Critical | 3
| 2 | 2 |Medium | 1
| 3 | 2 |Significant| 1
Ich bekomme die folgenden Ergebnisse mit meiner Abfrage. aber ich möchte alle Ränge, die 1 sind, und Ignorieren Rang 1 und Critical (was auch immer der Rang ist), wenn es von oben Ergebnisse gibt. Ich möchte die Ergebnisse erhalten, die wie folgt sind.
select unit_id, law_id, risk FROM
(select unit_id, law_id, a.risk,
rank() OVER (PARTITION BY unit_id, law_id ORDER BY crr DESC, risk DESC) as rank
from (select unit_id, law_id, risk, count(risk) as crr
from schema.table1 group by unit_id, law_id, risk
order by crr desc, risk desc
) a )b WHERE rank = 1 or risk = 'Critical'
tatsächlichen Ergebnisse
unit_id |law_id | risk
----------------------------
| 1 | 1 |Significant
| 1 | 3 |Significant
| 1 | 3 |Critical
| 2 | 2 |Medium
| 3 | 2 |Significant
Erwartete Ergebnisse
unit_id |law_id | risk
----------------------------
| 1 | 1 |Significant
| 1 | 3 |Critical
| 2 | 2 |Medium
| 3 | 2 |Significant
Vielen Dank Sagi. Es funktioniert – Taz
Kein Problem :) @Taz – sagi