【SQL】SQLで実装する特殊なオプションや関数を何個か挙げてみる

特殊なSQLのオプションや関数はデータベース製品やバージョンによって異なることがありますが、いくつか一般的なものを挙げてみます

ROW_NUMBER()関数

SELECT
    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num,
    employee_id,
    salary
FROM employees;

ROW_NUMBER()関数は行に連続する番号を付与します
OVER句を使って並び替えの順序を指定できます

LEAD()および LAG() 関数

SELECT
    employee_id,
    salary,
    LEAD(salary) OVER (ORDER BY hire_date) AS next_salary,
    LAG(salary) OVER (ORDER BY hire_date) AS prev_salary
FROM employees;

LEAD()関数は次の行の値を、LAG()関数は前の行の値を取得します
OVER句を使用して順序を指定します

STRING_AGG()関数

SELECT
    department,
    STRING_AGG(employee_name, ', ') AS employee_list
FROM employee_department
GROUP BY department;

STRING_AGG()関数は文字列を結合する際に使用します
この例では、各部署ごとに従業員の名前をカンマで区切って連結しています

CTE (Common Table Expressions)

WITH ManagerHierarchy AS (
    SELECT employee_id, manager_id
    FROM employees
    WHERE manager_id IS NULL
    UNION ALL
    SELECT e.employee_id, e.manager_id
    FROM employees e
    JOIN ManagerHierarchy m ON e.manager_id = m.employee_id
)
SELECT *
FROM ManagerHierarchy;

CTEは一時的な結果セットを作成するのに使用されます
この例では、従業員のマネージャーの階層を再帰的に取得しています

CONCAT関数

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;

この例では、first_namelast_nameの値をスペースで区切って連結しています

CASE文

SELECT 
    employee_id,
    salary,
    CASE
        WHEN salary > 50000 THEN 'High Salary'
        WHEN salary > 30000 THEN 'Medium Salary'
        ELSE 'Low Salary'
    END AS salary_range
FROM employees;

CASE文は条件に基づいて異なる値を表示するために使用されます

COALESCE関数

SELECT
    employee_id,
    COALESCE(supervisor_id, 'N/A') AS supervisor
FROM employees;

COALESCE関数はNULLでない最初の値を返します
上記の例ではsupervisor_idがNULLの場合には’N/A’を表示します

DISTINCTキーワード

SELECT DISTINCT department
FROM employees;

DISTINCTキーワードは重複する値を1つにまとめ、ユニークな値のみを表示します

LIMITオプション

SELECT *
FROM orders
LIMIT 10;

LIMITオプションは取得する行の数を制限します
上記の例では、最大で10行のデータが取得されます

いかがでしょうか?

ほかにもいろいろありますと思いますが、今回はここまでです!

ぜひ活用してみてくだださい

ではっ

是非フォローしてください

最新の情報をお伝えします