我需要一些帮助来对一些行进行分组查询,我整天都在尝试,没有找到解决方案,并且我敢肯定这很容易。也许有人可以在黑暗中带给我光明:

我的桌子:

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 ...

看来我在木头路上。

最佳答案

您的查询很棘手,因为您正在寻找给定组中是否存在成对的列值。此处的一种方法是首先通过BidCidvalue进行聚合,但要限制每个记录必须有一个匹配对。然后,通过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/

10-13 03:09