我有一个DB表,里面有一组文本,每一个都有五(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输出应该是:美好的一天,幸福
在这种情况下,文本"Hello“不会显示,因为没有至少3次发生的情绪。
我尝试了很多解决方案,但我找不到一个可行的解决方案.
发布于 2018-01-31 14:09:53
这有点棘手:
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
);发布于 2018-01-31 14:13:52
假设您的表名是情感,所以代码将是
select text,emotion
from emotions
group by text,emotion
having count(emotion)>2GROUP语句常与聚合函数(COUNT、MAX、MIN、SUM、AVG)一起使用,以将结果集分组为一个或多个列。
https://stackoverflow.com/questions/48543870
复制相似问题