SQL中級集約演算union
15894 ワード
集合演算union
2つのテーブルは
UNION ALL
2つのテーブル
Full outer Join
mysqlはこの関数をサポートしていません.
だからLEFT JOINユニオンRIGHT JOINでFULL OUTER JOIN
ハッカーランキングの問題:SymmetricPairs
答えを出す。
SELECT X,Y
FROM Functions
条件の表示:
2-1. all such symmetric pairs in ascending order by the value of X
SELECT X,Y
FROM Functions
ORDER BY X
2-2. symmetric pairs: Two pairs (X1, Y1) and (X2, Y2) are said to be symmetric pairs if X1 = Y2 and X2 = Y12-2-1. 一つの表で引用するのでINNERJOINと書き、質問で確認してONの後に書きます.
SELECT X,Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
ORDER BY X
2-2-2. 印刷が必要なテーブルはf 1を基準にマージされるので、SELECT文とORDER文の列をf 1の列に変更します.SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
ORDER BY f1.X
2-3. List the rows such that X1 ≤ Y1.SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
WHERE f1.x <= f1.y
ORDER BY f1.X
漏れがないか確認してから回します.
レポートはtestに戻り、エラーを確認します.
4-1. 問題のサンプル出力には2121部はなく,ここで発生する.出力が重複している感じがする->GROUP BY
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
WHERE f1.x <= f1.y
GROUP BY f1.x, f1.y
ORDER BY f1.X
4-2. 依然として2121組が見えます.WHEREの後はGROUP BYではなくグループ化してから条件を設定して->WHEREをクリアし、ここの条件をHAVINGに書き込むべきだと思います
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
GROUP BY f1.x, f1.y
HAVING f1.x<=f1.y
ORDER BY f1.X
4-3. 缲り返して感じてHAVING条件を順次確認する->f 1x
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
GROUP BY f1.x, f1.y
HAVING f1.x<f1.y
ORDER BY f1.X
現在,繰返し対称は解消されているようだが,=条件が奪われたため,誤りが残っている.サンプルクエリー文を作成して、同じ条件があるかどうかを決定します.
SELECT X,Y
FROM Functions
GROUP BY X,Y
5-1. 数が多すぎて確定しにくいので、出力の個数を確認します->SELECT文でカウントします(*)
SELECT X,Y, COUNT(*)
FROM Functions
GROUP BY X,Y
5-2. どれも1つのようなので目では見えにくいですしたがって、1つ以上の->HAVING COUNT(*)>1があることを確認してください
SELECT X,Y, COUNT(*)
FROM Functions
GROUP BY X,Y
HAVING COUNT(*) >1
5-3. 確認13 13ペア2個ずつ->先ほど4回作成したクエリーでHAVING節ORでCOUNT(*)>1を追加
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
GROUP BY f1.x, f1.y
HAVING f1.x<f1.y OR COUNT(*) >1
ORDER BY f1.X
対称を実現するには、対を偶数で割る2の場合、0とする場合は
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions AS f2 ON f1.X = f2.Y AND f2.X = f1.Y
GROUP BY f1.x, f1.y
HAVING f1.x<f1.y OR COUNT(*) % 2 = 0
ORDER BY f1.X
説明する。
SELECT X,Y
FROM Functions
WHERE X=Y
GROUP BY X, Y
HAVING COUNT(*)>1
UNION
SELECT f1.X, f1.Y
FROM Functions AS f1
INNER JOIN Functions As f2 ON f1.X = f2.y AND f2.X = f1.Y
WHERE f1.X < f1.Y
ORDER BY X
Reference
この問題について(SQL中級集約演算union), 我々は、より多くの情報をここで見つけました https://velog.io/@aza425/SQL-중급집합연산-UNIONテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol