MySQL结果由两个值组成

时间:2017-10-04 15:48:36

标签: sql sql-server group-by

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

我的表:

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

我似乎是在木路上。

2 个答案:

答案 0 :(得分:3)

您的查询很棘手,因为您正在查找给定组中是否存在列值对。一种方法是首先按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;

在这里演示:

Rextester

<强>更新

由于您使用的是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版本的演示:

Rextester

答案 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 |

demo http://www.sqlfiddle.com/#!9/ce56e97/2