SQLといえばSELECTとWHEREが使える程度のSQL初心者の私が、HACKERRANKでSQLの基礎を学んでいた時に直面した問題
以下のデータベースから「CITYが重複している行のデータ数」を取得せよ
STATION テーブル
Field | Type |
---|---|
ID | NUMBER |
CITY | VARCHAR |
STATE | VARCHAR |
LAT_N | NUMBER |
LONG_W | NUMBER |
...やばい 意外とわからんかも
ステップ1 まずは普通のCOUNTのおさらい
SQLで行数を知りたいときはCOUNT(カラム名)
を使う
今回の場合、全ての行数を知りたければこれ
SELECT COUNT(CITY) FROM STATION
次に「重複していない行数のみ」を知りたい場合、COUNT(DISTINCT カラム名)
を使う
今回の場合は以下
SELECT COUNT(DISTINCT CITY) FROM STATION
やりたいこととしては、単にこの差が取りたいだけなんだけど、、、どうやってとればいいんだろう、、、
なんかSQLlってUSER定義の変数指定できたよね? 変数に代入して えーっとえっと、、、
ステップ2 素直に引き算する
ごちゃごちゃ考えるまでもなかった 以下でいい
SELECT COUNT(CITY) - COUNT(DISTINCT CITY) FROM STATION
そう、COUNT関数で得られる値は普通の数字なのでselect文の中で引き算ができる(逆になぜ気づかなかった)
SQLマスターまでの道のりはまだまだ遠そうです、、、