0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SilverSQL】その他

Last updated at Posted at 2025-08-30

その他

問題
SELECT
    TO_CHAR(TO_DATE('95/12/31', 'RR/MM/DD'), 'YYYY/MM/DD') RR,
    TO_CHAR(TO_DATE('95/12/31', 'YY/MM/DD'), 'YYYY/MM/DD') YY
FROM
    dual;
結果
1995/12/31 2095/12/31
問題
SELECT
    TO_CHAR(TO_DATE('2012-Apr-25','YYYY-Mon-DD'), 'DDTH "of" FMMonth, YyyySP')
FROM
    dual;
結果
25TH of April, Two Thousand Twelve

kkkk49194.jpg

  • 埋め込みモードを無効にするには、日付書式に「FM」を指定します。
    設問では、「01st」ではなく「1st」、また「June」の後ろにスペースがないことから、埋め込みモードを無効にして問合せを実行したことがわかる。
問題
SELECT
    TO_CHAR(SYSDATE, 'fmDdth "of" Month, YYYY')
FROM
    dual;
結果
1st of June, 2012
問題
SELECT
    TO_CHAR(7777.777, 'L9,999')
FROM
    dual;
結果
¥7,778

グループ関数

グループ関数は複数件の入力データをグループ化して、集計処理を行った結果を1つだけ戻す関数で、複数行関数や集計関数と呼ばれることもある。

kkkk48963.jpg

LISTAGG

LISTAGG(連結して表示する列名 [, 'デリミタ'])
WITHIN GROUP(ORDER BY ソートする項目 [ASC | DESC])
  • グループ関数は2レベルまでしかネストできません。しかも、GROUP BY句を指定した場合に限る。
問題
SELECT
    MAX(MIN(AVG(salary))) "Sal"
FROM
    employees
GROUP BY 
    department_id, 
    job_id;
  • グループ関数を使用できるのは、SELECT句、ORDER BY句、HAVING句のみです。WHERE句ではグループ関数を使用することはできない。
問題
SELECT
    employee_id,
    employee_name,
    salary
FROM
    employees
WHERE
    AVG(salary) > 350000;

GROUP BY句と同様、HAVING句を使用する際にはいくつかの要件を満す必要がある。

  • HAVING句に列別名を指定することはできない
  • HAVING句にはGROUP BY句で指定した列、もしくはグループ関数のみ指定できる

HAVING句で取り出すグループを制限するのは、以下の4のタイミング。

  1. WHERE句がある場合は、グループ化する前にWHERE句の条件で行を制限する
  2. GROUP BY句に従ってグループ化する
  3. グループ関数を適用する
  4. HAVING句の条件で取り出すグループを制限する
  • GROUP BY句ではRR書式に変換しています。このようにSELECT句とGROUP BY句のデータ型の変換が異なると、エラーになる。
問題
SELECT
    TO_CHAR(order_date, 'YYYY') 
    ,SUM(order_total)
FROM
    orders
GROUP BY
    TO_CHAR(order_date, 'RR');
  • グループ関数をネストする場合は、必ずGROUP BY句を指定しなければなりません。
問題
SELECT
    AVG(MIN(salary))
FROM
    employees;
  • グループ関数では、COUNT関数に引数に*(アスタリスク)が指定された場合を除き、NULL値を無視して集計処理を行う。

  • HAVING句にはグループ関数とGROUP BY句に指定されている列を指定することができます。列別名を指定することはできない。

  • 条件にグループ関数を使用する場合は、WHERE句ではなくHAVING句で指定する。

  • WHERE句の条件にグループ関数を使用することはできない。

  • COUNT関数は取り出されたデータの件数を返す関数。

  • 引数には列名や数値型、文字列型、日付型の値を返す式の他、*(アスタリスク)を指定できます。

  • SELECT文にWHERE句、GROUP BY句、HAVING句を同時に指定する場合は、WHERE句、GROUP BY句、HAVING句、またはWHERE句、HAVING句、GROUP BY句の順に指定する。

  • WHERE句にはGROUP BY句で指定した列は指定できないので、エラーとなる。

  • HAVING句ではグループ関数をネストできない。

  • COUNT、MAX、MIN、SUM、AVG関数の引数には、次の値を指定する。

  • COUNT関数  : 数値型、文字列型、日付型の値を返す式または列と*(アスタリスク)

  • MAX/MIN関数 : 数値型、文字列型、日付型の値を返す式または列

  • SUM/AVG関数 : 数値型の値を返す式または列

  • GROUP BY句には1つ以上の列を指定する

  • GROUP BY句に列別名を指定することはできない

  • GROUP BY句を指定したSELECT文のSELECT句には、GROUP BY句で指定した列、もしくはグループ関数のみ指定できる
    (select句に指定したグループ関数以外の列はすべてgroup by句で指定する必要がある)

  • GROUP BY句とORDER BY句を併用する場合、ORDER BY句にはGROUP BY句で指定した列、もしくはグループ関数のみ指定できます
    (グループ化されている列の値を、グループ化されていない列の値を基準に並べ替える事はできない為)

SELECT文に指定する句の順序は、
1.SELECT句
2.FROM句
3.WHERE句
4.GROUP BY句
5.HAVING句
6.ORDER BY句
です。ただし、GROUP BY句とHAVING句は入れ替えができる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?