2011-09-25 163 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 
相关问题