繁体   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