Skip to content

SQL

Basic syntax

SELECT, FROM, LIMIT

sql
SELECT
  *
FROM
  crm
LIMIT
  10;

WHERE

sql
SELECT
  *
FROM
  crm
WHERE
  register_date > '2020-01-01'
LIMIT
  10;

AND

sql
SELECT
  *
FROM
  crm
WHERE
  register_date > '2020-01-01'
  AND is_priority = true
LIMIT
  10;

IN

sql
SELECT
  user_id,
  last_activity,
  segment
FROM
  crm
WHERE
  segment in ('foo', 'bar');

ORDER BY

sql
SELECT
  *
FROM
  crm
WHERE
  register_date > '2020-01-01'
ORDER BY
  register_date
LIMIT
  10;

DISTINCT

sql
SELECT DISTINCT
  (segment)
FROM
  crm;

JOIN (+ inner, left, right)

sql
SELECT
  *
FROM
  products as p
  JOIN stock as s ON p.product_id = s.product_id
LIMIT
  10;

GROUP BY, AVG, COUNT, SUM, MIN, MAX, AS

sql
SELECT
  segment,
  AVG(stayonpage) AS avg_stayonpage
FROM
  crm
GROUP BY
  segment
LIMIT
  10;

Transformations

sql
-- cast string to datetime
TO_TIMESTAMP(date_created,'YYYY-MM-DD HH:MI:SS')

-- cast datetime to strong
to_char(timestamp_column, 'YYYY-MM')

-- timedelta
WHERE date_created < (NOW() - '3 months'::interval)::TEXT

CRUD

sql
-- rename table
ALTER TABLE OG_NAME
rename TO NEW_NAME;

CTE

A common table expression is a temporary result set which you can reference within another SQL statement including SELECT, INSERT, UPDATE or DELETE.

sql
WITH
  cte_film AS (
    SELECT
      film_id,
      title,
      (
        CASE
          WHEN length < 30 THEN 'Short'
          WHEN length < 90 THEN 'Medium'
          ELSE 'Long'
        END
      ) length
    FROM
      film
  )
SELECT
  film_id,
  title,
  length
FROM
  cte_film
WHERE
  length = 'Long'
ORDER BY
  title;

Resources