我需要一些帮助来对一些行进行分组查询,我整天都在尝试,没有找到解决方案,并且我敢肯定这很容易。也许有人可以在黑暗中带给我光明:
我的桌子:
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 ,则只希望结果 Bid = 25
我试过了
SELECT id, Bid
FROM `table`
WHERE
Cid IN (11, 16) AND
value IN ('33','150')
GROUP BY Bid;
但是在这种情况下,我得到了所有可能的Cid ...
看来我在木头路上。
最佳答案
您的查询很棘手,因为您正在寻找给定组中是否存在成对的列值。此处的一种方法是首先通过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;
Demo
由于您使用的是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 - MySQL结果按两个值分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46569083/