我有一个带有一组文本的数据库表,对于每个文本都有五(5)种情绪。我需要做的是为每组行获得最频繁的情绪,只有当这种情绪出现至少三次时。否则,我不想在结果集中显示聚合行。 比如我有:
text | emotion
nice day | happyness
nice day | happyness
nice day | neutral
nice day | neutral
nice day | happyness
hello | sadness
hello | sadness
hello | surprise
hello | surprise
hello | neutral
输出应该是: 美好的一天|幸福 在这种情况下,文本"你好"没有显示,因为至少有3次没有情绪发生。
我尝试了很多解决方案,但我找不到合适的解决方案......
答案 0 :(得分:1)
这有点棘手:
select text, emoticon
from t
group by text, emoticon
having count(*) >= 3 and
count(*) = (select count(*)
from t t2
where t2.text = t.text
group by t2.emoticon
order by count(*) desc
limit 1
);
答案 1 :(得分:1)
让我们说你的表名是情绪所以代码将是
select text,emotion
from emotions
group by text,emotion
having count(emotion)>2
GROUP BY语句通常与聚合函数(COUNT,MAX,MIN,SUM,AVG)一起使用,以按一列或多列对结果集进行分组