MySQL:提取元素的最常用值

时间:2018-01-31 13:55:32

标签: mysql sql select group-by

我有一个带有一组文本的数据库表,对于每个文本都有五(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次没有情绪发生。

我尝试了很多解决方案,但我找不到合适的解决方案......

2 个答案:

答案 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)一起使用,以按一列或多列对结果集进行分组