2017-10-04 108 views
1

我需要一些幫助查詢來分組一些行,我試着整天找不到解決方案,我相信這很容易。也許有人可以給我帶來光在黑暗中:MySQL結果由兩個值組

我的表:

> id | Bid | Cid | value 
>  4 | 22 | 11 | 33 
>  5 | 24 | 11 | 33 
>  6 | 25 | 11 | 33 
>  7 | 24 | 11 | 100 
>  8 | 25 | 16 | 150 

我只想要結果買入= 25,如果我有熙11,16值33,150

我試圖

SELECT id, Bid FROM `table` WHERE Cid IN (11, 16) AND 
value IN('33','150') GROUP BY Bid; 

但在這案例我得到所有可能的Cid的...

看來我在木材的方式。

+0

你要檢查,如果出價既有(CID,值)對(11,33)和(16,150 )? – GurV

+0

是的,確切地說兩者都需要匹配 – Korty

+0

Hi @Korty您好,爲什麼您要在輸出中單獨出價= 25?如果你可以指定你試圖帶來的這個查詢的關係,那會很有幫助。並且groupby沒有工作,因爲它會將具有相同Bid值的所有行整合到輸出中的單個行中。 –

回答

3

您所查詢的是棘手的,因爲你正在尋找是否存在給定組中的列值對。一種方法是首先通過Bid,Cidvalue進行聚合,首先限制每個記錄具有匹配的對。然後通過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

+0

在你的例子中,它的工作原理!但如果我把它1:1(我證明!!)我得到一個錯誤:近','一個非布爾表達式是在一個條件預期的上下文中指定的。 – Korty

+0

@Korty給出的兩個答案在各自的演示中都沒有錯誤地運行。我認爲問題就在你身上。如果我的演示失敗了某些數據,然後叉我的Rextester並顯示我的問題。 –

+0

真的嗎?這是我們現在鼓勵的那種事情嗎? :-( – Strawberry

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 | 

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

+0

它在你的例子中工作,但我得到以下錯誤:錯誤語法靠近')'。我更準時地證明了它 - phpMyAdmin的特色? – Korty

+0

我發現我的錯誤,昨天已經太晚了,我使用MS SQL不是MySQL,所以它似乎語法錯誤是我的問題。你有這方面的經驗嗎? http://www.sqlfiddle.com/#!6/fad5c/3 – Korty