[SQL] 集計関数内にDISTINCT

重複(同一)するレコードを削除して抽出するDISTINCT。

SELECTのすぐ後ろに記載することで、同一レコードを排除することが
できるが、このDISTINCは集計関数のパラメータ部分にも
指定することができる。

たとえば、
COUNT(DISTINCT colmun_name)
みたいに指定できる。

SELECT COUNT(DISTINC DUMMY)
FROM
(
SELECT DUMMY FROM DUAL
UNION ALL
SELECT DUMMY FROM DUAL
)

結果、
DUMMY
-------------
1


DISTINCTなしの場合、

SELECT COUNT(DUMMY)
FROM
(
SELECT DUMMY FROM DUAL
UNION ALL
SELECT DUMMY FROM DUAL
)

結果、
DUMMY
-------------
2


[Java]2つのオブジェクトが等しいか判定するメソッド

単純なんだけど、よく使用するオブジェクトの比較処理。
出現するたびに比較ロジックを書くよりメソッド化して、
共通処理にしたほうがスッキリするかな。


/**
/* 2つのオブジェクトが等しいか判定するメソッド
/*
/* @param obj1 比較対象オブジェクト1
/* @param obj2 比較対象オブジェクト2
/* @return true/false 2つのオブジェクトが等しい場合はtrue
*/
public static boolean compareObjedct(Object obj1, Object obj2) {
boolean ret;

if (obj1 == null) {
ret = (obj2 == null);
} else {
ret = obj1.equals(obj2);
}

return ret;
}


しばらく、上記のメソッドを使いまわしてみる。



[SQL]UNIONとUNION ALL

2つ以上のSELECT文を1つに組み合わせる演算子として、
UNIONがある。

ただ、各SELECTのカラム数がそれぞれ一致していることや
各SELECTのカラムの型がそれぞれ一致していることなどの
制限はある。

で、UNIONとUNION ALLの違いというと

UNION:重複した行を削除して抽出
UNION ALL:重複した行も別々に抽出


になります。

どちらを使ったほうがいいのかというと、
重複する行が無いことが確定している場合は、
UNION ALLを使用したほうがいいです。
(重複行がある場合は、削除か残すかで使い分ける)

[理由]
UNIONは重複行を削除するため、内部的にソートしてチェックが走るので、
処理に少し時間がかかるが、UNION ALLは重複行削除が無い分早い。
そのため、パフォーマンスの良いUNION ALLを使ったほうがよい。


プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter