sql >> データベース >  >> RDS >> Mysql

MySQLは発生数でソート

    以下のクエリでは、文字列の出現回数をテキストと件名の両方の列に表示し、条件で結果を並べ替えることができますが、アプリケーションコードレベルで結果を並べ替える方が、パフォーマンスの面で優れたソリューションにはなりません。

    SELECT *,
    (LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'Keyword', ''))) / LENGTH('Keyword')
    +
    (LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'Keyword', ''))) / LENGTH('Keyword') `occurences`
     FROM 
    `Table`
     WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%')
    ORDER BY `occurences`  DESC
    

    フィドルデモ

    @lserniによる提案 発生をよりクリーンに計算する方法

    SELECT *,
    (LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'test', ''))) / LENGTH('test') `appears_in_text`,
    
    (LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'test', ''))) / LENGTH('test') `appears_in_subject`,
    
    (LENGTH(CONCAT(`Text`,' ',`Subject`)) - LENGTH(REPLACE(CONCAT(`Text`,' ',`Subject`), 'test', ''))) / LENGTH('test') `occurences`
     FROM 
    `Table1`
     WHERE (TEXT LIKE '%test%' OR SUBJECT LIKE '%test%')
    ORDER BY `occurences`  DESC
    

    フィドルデモ2



    1. ポイントインタイムリカバリを使用してPostgreSQLデータベースのRPOを最小化する方法

    2. mysqlストアプロシージャの再帰で深さを取得するにはどうすればよいですか?

    3. リスト内のすべての項目に一致する行のグループを選択します

    4. MicrosoftAccessのレポートウィザードを使用してレポートを作成する方法