MySQL根据另一列中的值选择具有相同列值的多行
问题描述:
我刚刚开始使用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行中只有第一排。 提前感谢您的帮助。
答
SELECT Tag, COUNT(*) FROM JodyTable
WHERE Tag NOT IN ('ldnon', 'ldnont')
AND ID IN (SELECT ID FROM JodyTable WHERE Tag IN ('ldnon', 'ldnont'))
答
如果我正确理解你的问题 - 你想用相同的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
这个可能很复杂,但很直接。
答
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
谢谢你!随着一点点的争吵,我能够得到这个拉我正在寻找的东西。这是我向你致谢的最后一个问题。这是非常赞赏。 选择标记,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