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