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

Mysqlは部分文字列のインスタンスをカウントし、順序付けます

    SELECT (CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, substr, ''))) / CHAR_LENGTH(substr) AS cnt
    ...
    ORDER BY cnt DESC
    

    うん、肥大化しているように見えますが、他に考えられる解決策はありません。

    mysql> select (CHAR_LENGTH('asd') - CHAR_LENGTH(REPLACE('asd', 's', ''))) / CHAR_LENGTH('s');
    +-----------------------------------------------------------------+
    | (CHAR_LENGTH('asd') - CHAR_LENGTH(REPLACE('asd', 's', ''))) / CHAR_LENGTH('s') |
    +-----------------------------------------------------------------+
    |                                                          1.0000 |
    +-----------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    
    
    mysql> select host, (CHAR_LENGTH(host) - CHAR_LENGTH(REPLACE(host, 'l', ''))) / CHAR_LENGTH('l') AS cnt from user;
    +-----------+--------+
    | host      | cnt    |
    +-----------+--------+
    | 127.0.0.1 | 0.0000 |
    | honeypot  | 0.0000 |
    | honeypot  | 0.0000 |
    | localhost | 2.0000 |
    | localhost | 2.0000 |
    +-----------+--------+
    5 rows in set (0.00 sec)
    


    1. Oracleによるページング

    2. SQL IN()句の値の順序による順序付け

    3. Oracleでクエリ結果をコンマ区切りリストとして返す

    4. byteaとして取得されたPostgreSQLJDBCNull文字列