MySQL根据另一列的值选择具有相同列值的多行

时间:2011-09-25 01:15:27

标签: mysql

我刚刚开始使用MySQL查询,并且已经花了好几天没有找到解决方案,所以这里就是这样。

表结构如下:

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

我想选择,计算和列出TAG,其中一个相同ID的TAG列出了'ldnont'或'ldnon'。

基本上,从这个数据集中,我想列出并计算:

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

我已经能够选择和计数,但只有第一行具有重复ID的行。 提前感谢您的任何帮助。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果我理解你的问题 - 你想要计算有多少具有相同身份证的记录在表中有“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

这个可能很复杂,但很简单。

答案 2 :(得分: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