【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_name
とlast_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行のデータが取得されます
いかがでしょうか?
ほかにもいろいろありますと思いますが、今回はここまでです!
ぜひ活用してみてくだださい
ではっ
是非フォローしてください
最新の情報をお伝えします