簡體   English   中英

sql組where子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM