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

GROUP BY句でエイリアスを使用するにはどうすればよいですか?

    何をしようとしているのかわからない。ただし、range_dayなしでクエリをサブクエリにラップすることはできます GROUPBY句で。次に、外部クエリでGROUPBY句をそのまま使用します。

    SELECT  SUM(score) score,
        type,
        context, -- WARNING! Not listed in group by clause
        post_id,
        table_code,
        comment_id,
        MIN(seen) seen,
        MAX(d_t) d_t,
        range_day
    FROM (
        SELECT  SUM(score) score,
            MAX(id) as id,
            type,
            context, -- WARNING! Not listed in group by clause
            post_id,
            e.table_code,
            comment_id,
            MIN(seen) seen,
            MAX(date_time) d_t,
            (CASE   WHEN FROM_UNIXTIME(MAX(date_time)) >= CURDATE() THEN 'today'
                WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesterday'
                WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
                ELSE 'in last month'
            END) as range_day
        FROM `events` e
        WHERE e.id IN ($ids)
        GROUP BY type, post_id, e.table_code, comment_id
    ) sub
    GROUP BY type, post_id, table_code, comment_id, range_day
    ORDER BY seen, MAX(d_t) desc, MAX(id) desc
    

    ただし、contextを選択します 集約なしでは、GROUPBY句にリストされていません。したがって、グループから「ランダムな」値を取得します。厳密モードでは、クエリは失敗します。



    1. ClusterControlを使用したMySQLパフォーマンスの監視

    2. mysqlデータベースで現在実行されているクエリを確認する方法は?

    3. 論理レプリケーションソリューションのパフォーマンス制限

    4. mysqlがwhere句で文字列をintにキャストしないようにします