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

MySQL:N行を選択しますが、1つの列に一意の値のみが含まれます

    おそらく最も洗練されたソリューションではなく、INのパフォーマンス 大きなテーブルでは苦しむかもしれません。

    ネストされたクエリは、最小のBirthyearを取得します 各都市について。このBirthyearを持つレコードのみ 外部クエリで一致します。年齢順に並べて、結果を3つに制限すると、自分の街で最も古い3人の最年長者になります(Egon Spenglerは脱落します)。

    SELECT Name, City, Birthyear, COUNT(*) AS ct
    FROM table
    WHERE Birthyear IN (SELECT MIN(Birthyear)
                   FROM table
                   GROUP by City)
    GROUP BY City
    ORDER BY Birthyear DESC LIMIT 3;
    
    +-----------------+-------------+------+----+
    | name            | city        | year | ct |
    +-----------------+-------------+------+----+
    | Henry Jones     | Chicago     | 1899 | 1  |
    | Mac Taylor      | New York    | 1955 | 1  |
    | Sarah Connor    | Los Angeles | 1959 | 1  |
    +-----------------+-------------+------+----+
    

    編集 -GROUP BY Cityを追加しました 同じ出生年の人は複数の値を返すため、外部クエリに。外側のクエリでグループ化すると、複数の人がその最小のBirthyearを持っている場合、都市ごとに1つの結果のみが返されるようになります。 。 ct 列には、そのBirthyearを持つ都市に複数の人が存在するかどうかが表示されます



    1. 読み取られた行数/実際の行読み取りプランエクスプローラーでの警告

    2. ストアドプロシージャ'dbo.aspnet_CheckSchemaVersion'が見つかりませんでした

    3. SQLite Count()のしくみ

    4. MySQLからの既存の値に基づいて次の英数字IDを取得する方法