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

MYSQLは、複数の行を持つ複数のサブクエリの結果を分割します

    次のクエリですべてを実行できる1つの方法は次のとおりです。

    SELECT 
    (dividendTable.messages / divisorTable.messages) AS result
    FROM
    (
        SELECT 
        firstTable.messages,
        @rn1 := @rn1 + 1 AS row_number
        FROM 
        (
            SELECT
                COUNT(channel) AS messages
            FROM Chats
            WHERE   message LIKE '%word%'
            GROUP BY    UNIX_TIMESTAMP(time) DIV 3600
        ) FirstTable, (SELECT @rn1 := 0) var1
    ) AS dividendTable
    INNER JOIN
    (   
        SELECT 
        secondTable.messages,
        @rn2 := @rn2 + 1 AS row_number
        FROM
        (
            SELECT 
                COUNT(channel) AS messages 
            FROM Chats 
            GROUP BY UNIX_TIMESTAMP(time) DIV 3600
        ) secondTable, (SELECT @rn2 := 0) var2
    ) AS divisorTable
    ON dividendTable.row_number = divisorTable.row_number;
    

    注:

    結果を小数点以下2桁に切り上げたい場合は、クエリの最初の行として次を使用します。

    SELECT
    ROUND((dividendTable.messages / divisorTable.messages),2) AS result
    

    デモはこちら

    注意: クエリでORDERBYを使用していません。ランダムな動作をする可能性があります。




    1. OracleEXPAND_SQL_TEXTの使用

    2. make_date()がPostgreSQLでどのように機能するか

    3. MySQLとPHPを使用したベストマッチ

    4. OracleのJSON_ARRAYAGG()関数