2017-08-09 7 views
3

ユニークな海岸と地域のみを含む都市名をリストすることは可能ですか? (つまり、そこに同じ沿岸地域の複数の都市が、あるので、彼らは除外すべきである)2つの異なるグループによるSQLグループ

例:

Seattle 
San Jose 
Florida 
Boston 

TABLE_NAME = MAP 
City  Coast  Region 
New York East  1 
Buffalo  East  1 
LA   West  2 
Seattle  West  1 
San Jose West  3 
Florida  East  4 
Boston  East  2 
San Diego West  2 

この例では、私は出力になりたいですニューヨークとバッファローはLAとサンディエゴのように同じ海岸と地域を共有しているため省略されています。

は、私が試した:私は、コストや地域ではなく、都市の名前を与えた

SELECT DISTINCT COAST, REGION 
FROM MAP 

は、私が試した:

SELECT CITY 
FROM MAP 
GROUP BY COAST, REGION 

しかし、それは私にエラーを(下のエラーを参照)を与えました。

ありがとうございました!

EDIT: HAVING節を追加しようとしましたが、以前と同じエラーが表示されました。これは私が持っていたエラーです:

ERROR 1055(42000); SELECTリストの式#1はGROUP BY句にはなく、GROUP BY句のカラムに機能的に依存しない非集約カラムrun_iu98jon.MAP.CITYを含みます。これはsql_mode = only_full_group_byと互換性がありません

+0

上記の最後のクエリで「COAST」と誤って入力されている可能性があります。 COASTを正しく綴ると、すべての都市名が返されますが、エラーは発生しません。 –

答えて

4

あなたは非常に近いですが、HAVING句が必要です。これはグループ単位の集計メトリックのWHERE句に似ています。

SELECT CITY 
FROM MAP 
GROUP BY COAST, REGION 
HAVING COUNT(*) = 1; 


編集:ここではSQLフィドルのリンクです: http://sqlfiddle.com/#!9/8da83b/2/0


編集3:これは、不必要に複雑なようだが、それが動作し、グループ化されていない任意のフィールドを使用して回避。余談として

SELECT City 
FROM Map 
INNER JOIN (
    SELECT Coast, Region, COUNT(*) as RowCount 
    FROM Map 
    GROUP BY Coast, Region 
) AS CoastRegion ON 
    Map.Coast = CoastRegion.Coast AND 
    Map.Region = CoastRegion.Region 
WHERE 
    CoastRegion.RowCount = 1 

、あなたのHackerRankの問題を解決するためにStackOverflowを使用して、かなり愚かなようです。

+0

私はHAVING節を追加しようとしましたが、それでも私にエラーが出ました: ERROR 1055(42000); SELECTリストの式#1はGROUP BY句にはなく、GROUP BY句のカラムに機能的に依存しない非集約カラムrun_iu98jon.MAP.CITYを含みます。これはsql_mode = only_full_group_byと互換性がありません – dd483pe

+0

どのMySQLバージョンを使用していますか? –

+0

バージョンはわかりません。ちょうどhackerrankからオンラインでいくつかの運動をしています。 – dd483pe

関連する問題