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?

Postgres・自分用SQLチートシート(SELECT編)

Posted at

はじめに

業務で頻繁に利用するクエリを使用例とともに自分用にまとめました。
随時、クエリの追加をしていきたいと考えています。

テストデータのCREATE TABLE、INSERTについては最後に紹介しています

利用するデータ

クエリ

select
  *
from
  simple_table;

実行結果

 id | last_name | first_name | created_at 
----+-----------+------------+------------
  1 | Tanaka    | Taro       | 2025-05-01
  2 | Suzuki    | Hanako     | 2025-05-01
  3 | Yamamoto  | Jiro       | 2025-05-15
(3 rows)

文字列を連結したい

クエリ

select
  concat_ws(' ', last_name, first_name, created_at, '作成')
from
  simple_table;

実行結果

           concat_ws           
-------------------------------
 Tanaka Taro 2025-05-01 作成
 Suzuki Hanako 2025-05-01 作成
 Yamamoto Jiro 2025-05-15 作成
(3 rows)

CSV等のデータをテーブルのように扱いたいとき

クエリ

WITH csv_data (user_id, age) AS (
  VALUES
    (1, 20),
    (2, 40)
)
SELECT
  st.id,
  st.last_name,
  st.first_name,
  cd.age
FROM
  simple_table st
  INNER JOIN csv_data cd
    ON st.id = cd.user_id;

実行結果

 id | last_name | first_name | age 
----+-----------+------------+-----
  1 | Tanaka    | Taro       |  20
  2 | Suzuki    | Hanako     |  40
(2 rows)

日付単位でグルーピングしたい時

クエリ

SELECT
  CAST(st.created_at AS DATE) AS date,
  Count(*)
FROM
  simple_table st
GROUP BY
  date
ORDER BY
  date;

実行結果

    date    | count 
------------+-------
 2025-05-01 |     2
 2025-05-15 |     1
(2 rows)

1対多を1行で表現したいとき

クエリ

SELECT
  CAST(st.created_at AS DATE) AS date,
  STRING_AGG(st.last_name::text, ',') AS last_names
FROM
  simple_table st
GROUP BY
  date
ORDER BY
  date;

実行結果

    date    |  last_names   
------------+---------------
 2025-05-01 | Tanaka,Suzuki
 2025-05-15 | Yamamoto
(2 rows)

SELECT結果をCSV出力したい

クエリ

\COPY (select * from simple_table limit 3) TO '出力先ファイルパス.csv' WITH CSV HEADER;

実行結果

-- psqlに接続したカレントディレクトリにCSVファイルが保存されているはずです。

◾️データの準備

CREATE TABLE IF NOT EXISTS simple_table (
    id INTEGER PRIMARY KEY,
    last_name TEXT,
    first_name TEXT,
    created_at DATE
);


INSERT INTO simple_table (id, last_name, first_name, created_at) VALUES
    (1, 'Tanaka', 'Taro', '2025-05-01'),
    (2, 'Suzuki', 'Hanako', '2025-05-10'),
    (3, 'Yamamoto', 'Jiro', '2025-05-15');

DROP TABLE IF EXISTS simple_table;
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?