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

Min()と別のフィールドを返しますか?

    重要なのは、これです。集計関数は、その行の残りの部分を「気にしません」。MINではなくSUMの場合、見やすくなります...

    解決策は少しトリッキーです。不等式でLEFTJOINを含む何かを行う必要があります:

    SELECT u.username, l.timer AS intScore, l.hashtag
    
    FROM
     leaderboard l
     INNER JOIN users u ON u.users_id = l.users_id
     LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer
    WHERE
     l2. users_id IS NULL
    ORDER BY intScore ASC
    

    アイデアは、MIN関数をスキップして行全体を取得することにより、最小値を取得することです

    リーダーボードテーブルから日付(またはその他の列/基準)でフィルタリングするには、使用する各テーブルをフィルタリングする必要があります。ON条件でLEFT JOINedテーブルをフィルタリングすることが重要です。そうしないと、フィルタリングNULLの影響がなくなります。

    SET @date0 = '2018-01-01';
    SELECT u.username, l.timer AS intScore, l.hashtag
    
    FROM
     leaderboard l
     INNER JOIN users u ON u.users_id = l.users_id
     LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer AND l2.game_date >= @date0
    WHERE
     l.game_date >= @date0
     l2.users_id IS NULL
    ORDER BY intScore ASC
    

    お役に立てば幸いです




    1. 無制限のサブカテゴリを作成するための最良の方法は何ですか

    2. Mysqlがデフォルトエンジンを変更

    3. Docker-RailsアプリはリンクされたPostgresコンテナーに接続できません(実行されていないようです)

    4. Grails / HibernateでOracleのGUID()で生成されたIDを使用する