我需要一些帮助来查询对某些行进行分组,我整天都在尝试并找不到解决方案,我确信它很容易。也许有人可以在黑暗中带给我光明:
我的表:
> id | Bid | Cid | value
> 4 | 22 | 11 | 33
> 5 | 24 | 11 | 33
> 6 | 25 | 11 | 33
> 7 | 24 | 11 | 100
> 8 | 25 | 16 | 150
如果我有 Cid 11,16 和值33,150
,我只希望结果出价= 25我试过
SELECT id, Bid FROM `table` WHERE Cid IN (11, 16) AND
value IN('33','150') GROUP BY Bid;
但在这种情况下,我得到了所有可能的Cid ......
我似乎是在木路上。
答案 0 :(得分:3)
您的查询很棘手,因为您正在查找给定组中是否存在列值对。一种方法是首先按Bid
,Cid
和value
进行汇总,并限制每条记录都有匹配的对。然后通过Bid
对此进行子查询,并检查计数是否为2,表示两个对都存在。
SELECT Bid
FROM
(
SELECT Bid, Cid, value
FROM yourTable
WHERE (Cid, value) IN ((11, 33), (16, 150))
GROUP BY Bid, Cid, value
) t
GROUP BY Bid
HAVING COUNT(*) = 2;
在这里演示:
<强>更新强>
由于您使用的是SQL Server,我们可以稍微将上述查询重构为:
SELECT Bid
FROM
(
SELECT Bid, Cid, value
FROM yourTable
WHERE (Cid = 11 AND value = 33) OR (Cid = 16 AND value = 150)
GROUP BY Bid, Cid, value
) t
GROUP BY Bid
HAVING COUNT(*) = 2;
这是查询的SQL Server版本的演示:
答案 1 :(得分:1)
将GROUP BY与某些SUM
组合使用时,可以找到答案SELECT
Bid
FROM
Table1
GROUP BY
Bid
HAVING
SUM(Cid = 11) AND SUM(Cid = 16)
AND
SUM(value = 33) AND SUM(value = 150)
<强>结果强>
| Bid |
|-----|
| 25 |