====== SQL snippets useful or not ... you decide ====== ===== Raw epoch timestamp to something fancy ===== to_char(to_timestamp((metadata->'last_visit')::int), 'YYYYWW'::text) Hint: a common anti pattern is that for the first 10 weeks, the generated condensed dates look like '20221' instead of '202201' which is avoid by this snippet (in sql!) ===== Distinct list of column values ===== select DISTINCT ON (shop_id) shop_id FROM filters; Hint: never use “SELECT DISTINCT” without ON. GROUP BY is much faster but “DISTINCT ON” is even faster. ===== Update a column in one table with a column from another table ===== UPDATE t1 SET t1.c1 = new_value FROM t2 WHERE t1.c2 = t2.c2; ==== Hex Juggling ==== select ('x' ||substring(md5('picalike_category'), 32-5, 32))::bit(24)::int | (x1<<24); Convert a hash part into a 24-bit integer and also add some value === Find Tuples without a Match === select filters.picalike_id, x1 from filters left join sim_clusters on filters.picalike_id = sim_clusters.picalike_id where x1 is null; An alternative to EXCEPT which is horribly slow. The idea is a left outer join that fills x1 with null if no matching partner is found. This can be used as a filter. In our setup 18 secs vs >150 secs runtime, but depending on the result set memory consumption can be significant + parallel workers == Conditional WHERE filters == (CASE WHEN array_length(f.picalike_gender,1) IS NOT NULL THEN f.picalike_gender && s.picalike_gender END) Without a reference lookup, it is not clear whether there is a gender or not, this we need a conditional filter to use the gender if present and 'True' otherwise. Keywords: sql psql snippets postgres