まぁ普通に考えればそんな非効率な書き方はしませんね
SQL
1SELECT t1.column1 FROM table_name as t1
2JOIN table_name as t2
3ON t1.column1 = t2.column1;
追記:サンプルデータ
CREATE TABLE table_name(column1 int,index(column1));
INSERT INTO table_name VALUES(1),(1),(2),(3),(3);
追記:新サンプル
とりあえずcolumn5はcolumn1に読み替えて回答します
SQL
1CREATE TABLE table_name(column1 int,column3 int null,column4 int null);
2INSERT INTO table_name VALUES(1,null,100),(1,200,null),(1,null,null),(2,100,300);
上記に対して
SQL
1SELECT t1.column1,MAX(t2.column2) AS max_column2
2FROM table_name AS t1
3JOIN (SELECT COALESCE(column3, column4) AS column2,column1 FROM table_name) AS t2
4ON t1.column1 = t2.column1
5GROUP BY column1;
を実行するなら、以下で十分です
SQL
1SELECT column1,MAX(COALESCE(column3, column4)) AS max_column2
2FROM table_name
3GROUP BY column1
サブクエリで自分自身を結合するのでよく使うのは
特定のカラムの最大値を持つデータを表示するなど
サブクエリの中で集計が発生する場合です。
なお今回のCOALESCEの使い方ではcolumn3とcolumn4のどちらかにある最大値をとる
という仕様にはなっていません。なのでcolumn2_maxがもし上記条件を希望する場合は
正確にデータを取ることができません。
column3が合致した時点でcolumn4を検証しないのでcolumn3<column4の場合データが拾えない
もしどちらか最大値をとりたいならこんな感じ
SELECT column1,MAX(GREATEST(COALESCE(column3,0),COALESCE(column4,0))) AS max_column2
FROM table_name
GROUP BY column1;