###前提・実現したいこと
MySQLを勉強しているのですが,少し疑問に思った部分があったので,
疑問を解決したいです.
###使用しているデータ
<都道府県テーブル>
都道府県コード
都道府県名
人口
面積
<市町村テーブル>
都道府県コード
市町村コード
区分
市町村名
人口
面積
世帯数
###該当のソースコード
以下のSQLは市町村数が上位10個の都道府県を表示するためのものです.
適切に動作し,出力結果も正しいです.
ですが,私の認識では,GROUP BYで指定したものか,集約関数しかSELECTのカラムに選択出来ないと思っていました.
しかし,今回はGROUP BYに都道府県コードを設定し,SELECTには都道府県名を指定しています.
sql
1SELECT 都道府県名, COUNT(*) AS 市町村数 FROM 都道府県 JOIN 市町村 USING (都道府県コード) GROUP BY 都道府県コード ORDER BY 市町村数 DESC LIMIT 10;
以下のように,GROUP BYの部分を都道府県名に変更しても.同じ結果が出力されます.
エラーも出ません.
sql
1SELECT 都道府県名, COUNT(*) AS 市町村数 FROM 都道府県 JOIN 市町村 USING (都道府県コード) GROUP BY 都道府県名 ORDER BY 市町村数 DESC LIMIT 10;
###解決したい問題
確かに,都道府県コードと都道府県名は一対一対応なので,取替え可能ですが,
そういう話でもないような気がします.
GROUP BYに指定したもの意外をSELECTに設定できている疑問を解決したいです.
よろしくお願いします.
###補足情報(言語/FW/ツール等のバージョンなど)
DockerでMySQLを実行しています.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 09:37