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

すでに巨大なクエリにサブクエリを追加する

    これを試してください:

    SELECT
        (
            CASE
                WHEN a.winner = a.f_a THEN "Win"
                WHEN a.winner = a.f_b THEN "Loss"
                WHEN a.winner IS NULL THEN a.method
            END
        ) AS result,
        SUM(a.f_a IN (d.fighter_a, d.fighter_b) AND d.winner <=> a.f_a) AS fighter_wincount,
        SUM(a.f_a IN (d.fighter_a, d.fighter_b) AND d.winner IS NOT NULL AND d.winner <> a.f_a) AS fighter_losscount,
        SUM(a.f_a IN (d.fighter_a, d.fighter_b) AND d.method = 'Draw') AS fighter_drawcount,
        SUM(a.f_a IN (d.fighter_a, d.fighter_b) AND d.method = 'No Contest') AS fighter_nocontestcount,
        b.name AS opponent,
        SUM(a.f_b IN (d.fighter_a, d.fighter_b) AND d.winner <=> a.f_b) AS opponent_wincount,
        SUM(a.f_b IN (d.fighter_a, d.fighter_b) AND d.winner IS NOT NULL AND d.winner <> a.f_b) AS opponent_losscount,
        SUM(a.f_b IN (d.fighter_a, d.fighter_b) AND d.method = 'Draw') AS opponent_drawcount,
        SUM(a.f_b IN (d.fighter_a, d.fighter_b) AND d.method = 'No Contest') AS opponent_nocontestcount,
        b.fighter_id AS opponent_id,
        b.fighting_out_of_country AS opponent_country,
        a.method AS method,
        a.method_type AS method_type,
        a.round AS round,
        a.time AS time,
        c.event_id AS event_id,
        c.event_name AS event,
        c.event_date AS date,
        c.event_city AS event_city,
        c.event_state AS event_state,
        c.event_country AS event_country
    FROM
        (
            SELECT 
                fight_id,
                IF(fighter_b = :fighter_id, fighter_b, fighter_a) AS f_a,
                IF(fighter_b = :fighter_id, fighter_a, fighter_b) AS f_b,
                winner,
                method,
                method_type,
                round,
                time,
                event
            FROM 
                fights
            WHERE
                :fighter_id IN (fighter_a, fighter_b)
        ) a
    INNER JOIN
        fighters b ON a.f_b = b.fighter_id
    INNER JOIN
        events c ON a.event = c.event_id
    LEFT JOIN
        (
            SELECT 
                a.fighter_a,
                a.fighter_b,
                a.winner,
                a.method,
                b.event_date
            FROM
                fights a
            INNER JOIN
                events b ON a.event = b.event_id
        ) d ON 
            (a.f_a IN (d.fighter_a, d.fighter_b) OR a.f_b IN (d.fighter_a, d.fighter_b)) AND
            d.event_date < c.event_date
    GROUP BY
        a.fight_id
    ORDER BY
        c.event_date DESC
    



    1. ロールバックスクリプトオラクルの自動化

    2. 集計関数のないGROUPBY句の理由は何ですか?

    3. MySQLで1つを除くすべての行を選択します

    4. mysqlデータベースからドロップダウンボックスが使用されている場合、行から複数​​の値を表示する