[英]sql group where clause
我有一張這樣的桌子:
| grpType | grpId | paramId | val |
|---------|--------|:-------:|------:|
| 0 | 81452 | 123 | 1,293 |
| 0 | 81452 | 127 | 46 |
| 2 | 19873 | 282 | 3 |
| 2 | 19873 | 283 | -10,3 |
| 3 | 81455 | 123 | 1,144 |
| 3 | 100379 | 178 | 40 |
| 3 | 100379 | 188 | 269 |
| 3 | 100379 | 189 | 298 |
| 3 | 100379 | 190 | 267 |
| 3 | 100379 | 191 | 278 |
| 1 | 256 | 188 | 419 |
| 1 | 256 | 189 | 433 |
| 1 | 256 | 190 | 434 |
| 1 | 256 | 191 | 429 |
我想從該表中獲取具有諸如“paramId = 123 and val> = 1.2”、“paramId=188 and val<=269”、“paramId=189 and val>=298”等條件的數據。
此處,由於“paramId = 188 and val <=269”和“paramId = 189 and val >298”的條件在表中具有相同的“grpId”,因此為“Val”列指定的兩個條件都應提供。 上表中,有2組滿足“paramId = 188, paramId = 189”條件。 我必須得到提供“paramId = 188 and val <=269”和“paramId = 189 and val >298”要求的組。(所以 100379 id 的組)
但是,應將提供第三個條件(paramId = 123 和 val >= 1.2)的行添加到數據中。 在上表中,有兩個“paramId = 123”行。 我必須得到提供“val >= 1.2”要求的行。
“grpType”列不是重要的列。 你可以忽略。 我只需要一個獨特的“grpID”列表。
我應該如何編寫查詢?
您可以編寫這些條件的組合,在 where 條件中使用OR
。
Select *
from <TableName>
where ((paramId = 123 and Val >= 1.2) or (paramid=188 and Val <= 269) or (paramid=189 and Val <= 298))
就像查詢會起作用一樣。 如果我使用相交,我無法獲取行本身。 我只能獲取公共數據。 現在對我來說已經足夠了。 該表中的行數超過 300 萬,並且還在不斷增加。 我有點擔心性能。 我會繼續研究。
(select grpId from tableX where paramId=51 and val>=600
intersect
select grpId from tableX where paramId=52 and val<15)
union
(select grpId from tableX where paramId=188 and val<= 269
intersect
select grpId from tableX where paramId=189 and val<= 298)
union
select grpId from tableX where paramId=123 and val<1.29
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.