gpt4 book ai didi

sql - MySQL 结果按两个值分组

转载 作者:行者123 更新时间:2023-12-02 09:16:42 26 4
gpt4 key购买 nike

我需要一些帮助来进行查询以对某些行进行分组,我尝试了一整天但没有找到解决方案,我确信这很容易。也许有人可以在黑暗中为我带来光明:

我的 table :

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com