SELECT
direction_id,
MIN(orders_per_sec) AS min_orders,
MAX(orders_per_sec) AS max_orders,
AVG(orders_per_sec) AS avg_orders,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY orders_per_sec) AS median_orders,
PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY orders_per_sec) AS p25_orders,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY orders_per_sec) AS p75_orders,
VAR_POP(orders_per_sec) AS population_variance,
-- or VAR_SAMP(orders_per_sec) AS sample_variance,
STDDEV_POP(orders_per_sec) AS population_std_dev,
-- or STDDEV_SAMP(orders_per_sec) AS sample_std_dev
FROM
order_counts
GROUP BY
direction_id
WITH stats AS (
SELECT
AVG(numeric_column) AS avg_value,
STDDEV(numeric_column) AS std_dev,
MIN(numeric_column) AS min_value,
MAX(numeric_column) AS max_value
FROM your_table
),
bucketed_data AS (
SELECT
*,
WIDTH_BUCKET(
numeric_column,
(SELECT min_value FROM stats),
(SELECT max_value FROM stats),
10 -- number of buckets
) AS bucket,
(SELECT avg_value FROM stats) AS avg_value,
(SELECT std_dev FROM stats) AS std_dev
FROM your_table
)
SELECT
*,
CASE
WHEN numeric_column > avg_value + 3 * std_dev THEN 'High Outlier'
WHEN numeric_column < avg_value - 3 * std_dev THEN 'Low Outlier'
ELSE 'Normal'
END AS outlier_status
FROM bucketed_data
ORDER BY bucket, numeric_column;
make | model | sales
-------|---------|------
Toyota | Camry | 500
Toyota | Camry | 500
Toyota | Corolla | 300
Toyota | Corolla | 500
Honda | Civic | 400
Honda | Civic | 500
Honda | Accord | 600
Honda | Accord | 500
SELECT
make,
model,
GROUPING(make, model),
sum(sales)
FROM
items_sold
GROUP BY ROLLUP(make, model);
-- or CUBE if we need include make as NULL
make | model | GROUPING | sum(sales)
--------|----------|----------|-----------
Toyota | Camry | 0 | 1000
Toyota | Corolla | 0 | 800
Toyota | NULL | 1 | 1800
Honda | Civic | 0 | 900
Honda | Accord | 0 | 1100
Honda | NULL | 1 | 2000
NULL | NULL | 3 | 3800
COUNT(CASE WHEN fk_role = 1 AND fk_status = -13 THEN 1 END) AS removed_users,
AVG(CASE WHEN order_count > 1 THEN order_total ELSE NULL END),
COUNT(DISTINCT user_id) AS distinct_user_count
SELECT
group_id,
COVAR_SAMP(x1, x1) AS cov_x1_x1,
COVAR_SAMP(x1, x2) AS cov_x1_x2,
COVAR_SAMP(x2, x2) AS cov_x2_x2
FROM
data_points
GROUP BY
group_id;
SELECT
region,
REGR_SLOPE(sales, advertising_spent) AS slope,
REGR_INTERCEPT(sales, advertising_spent) AS intercept,
REGR_R2(sales, advertising_spent) AS r_squared
FROM
sales_data
GROUP BY
region;
SELECT
patient_id,
COUNT(appointment_id) AS total_appointments,
SUM(amount) AS total_amount,
RANK() OVER (ORDER BY COUNT(appointment_id) DESC) AS appointment_rank
--, DENSE_RANK() OVER (...) AS appointment_rank
FROM
dental_appointments
GROUP BY
patient_id
HAVING
COUNT(appointment_id) > 5
AND SUM(amount) > 500;
SELECT
patient_id,
appointment_id,
appointment_date,
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY appointment_date DESC) AS rn
FROM
dental_appointments
WHERE
status = 'completed'
ORDER BY
patient_id, rn;
SELECT
patient_id,
appointment_id,
appointment_date,
LAG(appointment_date, 1) OVER (PARTITION BY patient_id ORDER BY appointment_date) AS previous_appointment,
LEAD(appointment_date, 1) OVER (PARTITION BY patient_id ORDER BY appointment_date) AS next_appointment
FROM
dental_appointments
ORDER BY
patient_id, appointment_date;
SELECT
date,
stock_symbol,
price,
CUME_DIST() OVER (
PARTITION BY stock_symbol
ORDER BY price
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
) AS price_position_30day
FROM
stock_prices
ORDER BY
stock_symbol,
date;
INSERT INTO my_table_name (
field_1,
... ,
field_n
)
SELECT -- 1
field_1,
... ,
field_n * 10 -- 2
FROM my_table_name
WHERE id = ( -- 3
SELECT id
FROM my_table_name
WHERE name = 'John'
AND last_name = 'Doe'
LIMIT 1
) AND
NOT EXISTS ( -- 4
SELECT
1
FROM
some_other_table where fk_key_field = 42 -- 5
)
-- descendants
-- id parent_id name
-- 1 NULL John
-- 2 1 Mary
WITH RECURSIVE family_tree AS (
-- Base case: start with the root ancestor
SELECT
id,
parent_id,
name,
0 AS generation -- Root starts at generation 0
FROM
descendants
WHERE
id = 1 -- Starting with John (id = 1)
UNION ALL
-- Recursive case: find all descendants of the previous level
SELECT
d.id,
d.parent_id,
d.name,
ft.generation + 1 AS generation -- Increment generation for each descendant
FROM
descendants d
INNER JOIN
family_tree ft ON d.parent_id = ft.id
)
-- Final selection: retrieve the complete family tree
SELECT
id,
parent_id,
name,
generation
FROM
family_tree
ORDER BY
generation, id;
A = 13 # Binary: 1101
B = 6 # Binary: 0110
# A AND NOT B
result = A & ~B # 9 (Binary: 1001)
SELECT DISTINCT
ar.request_details->>'clinic_id' AS unique_clinic_id, -- 1
array_agg(DISTINCT t.name) AS treatment_names, -- 2
ar.request_details->>'treatment_date' AS treatment_date,
ar.request_details->>'appointment_time' AS appointment_time,
date(ar.created_at) AS created_date, -- 3
ar.patient_id,
zc.city,
zc.zip_code
FROM
appointment_requests ar
JOIN
clinics c
ON
ar.request_details->>'clinic_id' = c.clinic_id::text -- 4
JOIN
zip_codes zc ON c.zip_code_id = zc.zip_code_id
LEFT JOIN LATERAL -- 5
jsonb_array_elements_text( -- 6
ar.request_details->'required_treatments'
) AS req_treatment(treatment_id)
ON true
LEFT JOIN
treatments t ON t.treatment_id = req_treatment.treatment_id::integer
WHERE
EXTRACT(EPOCH FROM (ar.updated_at - ar.created_at)) > 60*60 -- 7
AND ar.status = 'pending'
AND ar.patient_id NOT IN (-1, 20000)
GROUP BY
ar.request_details->>'clinic_id',
ar.request_details->>'treatment_date',
ar.request_details->>'appointment_time',
date(ar.created_at),
ar.patient_id,
zc.city,
zc.zip_code
;
SELECT
u.name,
o.occupation,
a.address,
p.phone_number
FROM
users u
JOIN occupations o ON u.id = o.user_id
JOIN addresses a ON u.id = a.user_id
JOIN phone_numbers p ON u.id = p.user_id;
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
'2008-03-04 12:00', '10 hours');