【问题标题】:Order by frequency of occurence within a field [duplicate]按字段内出现频率排序[重复]
【发布时间】:2013-06-24 06:19:12
【问题描述】:

MySQL 有没有一种方法可以根据某项在单个字段中出现的次数进行排序?

获取以下数据:

id, value
1, 'Bob'
2, 'Bob Bob Bob'
3, 'Bob Bob Bob Bob'
4, 'Bob Bob'

如果我查询:

SELECT id from table where value like '%Bob%'

结果将是 1,2,3,4,因为它们都包含 Bob

我希望它根据 Bob 在每个值中出现的次数来排序,所以我希望 3,2,4,1 作为 Bob 在 3 中出现频率最高而在 1 中出现频率最低的响应。

SELECT id from table where value like '%Bob%' order by frequency_score

如何计算频率分数?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    一个想法可能是这样的:

    SELECT   *
    FROM     yourtable
    WHERE    value LIKE '%Bob%'
    ORDER BY LENGTH(value) - LENGTH(REPLACE(value, 'Bob', '')) DESC
    

    请注意,此查询不会匹配整个单词,只会匹配子字符串。如果您需要匹配整个单词,您可以使用以下内容:

    SELECT   *
    FROM     yourtable
    WHERE    value REGEXP '[[:<:]]Bob[[:>:]]'
    ORDER BY
      LENGTH(value) -
      LENGTH(REPLACE(CONCAT(' ', REPLACE(value, ' ', '  '), ' '), ' Bob ', '')) DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多