我在mysql中有下表:
transcription_id | speaker | sentence
---------------------------------------------------------
1918 1 'hello, good morning'
1918 2 'how are you'
speaker
列只能为1或2,transcription_id
是数据集的键,因此它是唯一的。
通常情况下,一个transcription_id
拥有两个发言者(分别为1和2),因为对话通常在2个人之间进行,但是在某些情况下,只有一个发言者(例如transcription_id = 1921):
transcription_id | speaker | sentence
--------------------------------------------------------
1920 1 'hello, good morning'
1920 2 'hi!'
**1921 1 'good night' <----------------------**
1922 1 'hello, good morning'
1922 2 'buenas notches!'
如何只选择同时具有两个说话者的句子?
答案 0 :(得分:0)
您可以使用EXISTS
:
SELECT t.*
FROM table t
WHERE t.speaker in (1, 2) AND
EXISTS (SELECT 1
FROM table t1
WHERE t1.transcription_id = t.transcription_id AND t1.speaker <> t.speaker
);
答案 1 :(得分:0)
您可以使用聚合将它们放在一排:
select transaction_id, min(sentence), max(sentence)
from t
group by transaction_id;
这会将值放在一行中。如果您要单个行,那么Yogesh的答案是正确的。
答案 2 :(得分:0)
有一个标准的SQL子句HAVING
允许按汇总值过滤组。
在这种情况下,您应该使用HAVING COUNT(*) > 1
来获取所需的内容。
SELECT *
FROM transcription_table
WHERE (transcription_id, speaker)
IN (
SELECT transcription_id, speaker
FROM transcription_table
GROUP BY transcription_id, speaker
HAVING COUNT(*) > 1
);
根据您要查找的内容,可以改变计数。
例如,使用HAVING COUNT(DISTINCT SPEAKER) > 1
排除可重复的说话者。
答案 3 :(得分:0)
您可以按转录_id和条件transcription_id
对having count(distinct speaker) = 2
进行分组:
select *
from tablename
where transcription_id in (
select transcription_id
from tablename
group by transcription_id
having count(distinct speaker) = 2
)
答案 4 :(得分:0)
如果表中的数据对于相同的speaker
两次不包含相同的transcription_id
,则可以使用以下MySQL查询
SELECT * FROM speakers
WHERE transcription_id IN (
SELECT transcription_id
FROM speaker
group by transcription_id having count(*) = 2);