2011-09-25 164 views
0

我剛剛開始使用MySQL查詢,並且一直在努力尋找解決方案,因此這裏一直在努力。MySQL根據另一列中的值選擇具有相同列值的多行

表結構如下:

|   ID   | TAG 
| 111909684134416384 | WesternU 
| 111909684134416384 | ldnon 
| 111910470428008448 | ldnont 
| 111910470428008448 | fb 
| 111910605249712128 | LTC 
| 111910605249712128 | ldnon 
| 111911886139826176 | ldnont 
| 111911886139826176 | WesternU 

我想選擇,計數,並列出TAG(s)的結合相同的ID的一個標籤具有 'ldnont' 或 'ldnon' 列出。

從本質上講,從這個數據集,我想列出並計算:

WesternU (2) 
fb (1) 
LTC (1) 

我已經能夠選擇和計算,但重複的ID行中只有第一排。 提前感謝您的幫助。

回答

2
SELECT Tag, COUNT(*) FROM JodyTable 
     WHERE Tag NOT IN ('ldnon', 'ldnont') 
     AND ID IN (SELECT ID FROM JodyTable WHERE Tag IN ('ldnon', 'ldnont')) 
+0

謝謝你!隨着一點點的爭吵,我能夠得到這個拉我正在尋找的東西。這是我向你致謝的最後一個問題。這是非常讚賞。 選擇標記,COUNT(*)AS CNT FROM JodyTable WHERE標籤NOT IN( 'ldnont', 'ldnon') 和ID IN(SELECT ID FROM JodyTable WHERE標籤IN( 'ldnont', 'ldnon')) GROUP BY標記 ORDER BY cnt DESC – Jody

0

如果我正確理解你的問題 - 你想用相同的ID來計算多少記錄有任何「ldnon」或「ldnont」標籤表,還不算「ldnon」和「ldnont」自己

select outer.tag, count(*) as outer.num 
from table as outer 
where outer.tag NOT = "ldnon" AND outer.tag NOT = "ldnont" 
outer.id IN (
select * from table as inner 
where outer.id = inner.id AND 
(inner.tag = "ldnon" OR onner.tag="ldnont") 
) 
group by outer.tag 
order by outer.num 

這個可能很複雜,但很直接。

+0

感謝您的建議,但回答上面似乎多了幾分直線前進。 VS拉里的答案會有速度優勢嗎? – Jody

+0

這是相同的,只是使用幾個捷徑代替顯式條件列表。享受:) – agoldis

0
select t1.tag, count(*) 
from table as t1, table as t2 
where 
t1.id = t2.id AND t1.tag NOT = t2.tag AND 
t1.tag NOT = "ldnon" AND t1.tag NOT = "ldnont" AND 
(t2.tag = "ldnon" OR t2.tag = "ldonont") 
group by t1.tag 
相關問題