diff --git a/vberetar/postgresql/sql_dates_strings_logic.sql b/vberetar/postgresql/sql_dates_strings_logic.sql index 6401815..447954a 100644 --- a/vberetar/postgresql/sql_dates_strings_logic.sql +++ b/vberetar/postgresql/sql_dates_strings_logic.sql @@ -13,7 +13,7 @@ ORDER BY days_since_registration DESC; -- 2 Задача SELECT name, LOWER(email) AS email_clean, - SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain + SUBSTRING(LOWER(email) FROM POSITION('@' IN LOWER(email)) + 1) AS domain FROM users WHERE email IS NOT NULL ORDER BY domain, name; @@ -30,6 +30,7 @@ SELECT name, WHEN age < 25 THEN 'young' WHEN age BETWEEN 25 AND 35 THEN 'adult' WHEN age > 35 THEN 'senior' + ELSE 'unknown' END AS age_group FROM users ORDER BY age; @@ -70,17 +71,17 @@ FROM users; SELECT name, CURRENT_DATE - created_at::date AS days_since_registration, CASE - WHEN created_at >= CURRENT_DATE - INTERVAL '30 days' THEN 'new' - WHEN created_at < CURRENT_DATE - INTERVAL '30 days' - AND created_at > CURRENT_DATE - INTERVAL '180 days' THEN 'middle' - WHEN created_at < CURRENT_DATE - INTERVAL '180 days' THEN 'old' + WHEN created_at::date >= CURRENT_DATE - INTERVAL '30 days' THEN 'new' + WHEN created_at::date < CURRENT_DATE - INTERVAL '30 days' + AND created_at::date > CURRENT_DATE - INTERVAL '180 days' THEN 'middle' + ELSE 'old' END AS tenure_group, is_active FROM users -ORDER BY created_at >= CURRENT_DATE - INTERVAL '30 days', - created_at < CURRENT_DATE - INTERVAL '30 days' - AND created_at > CURRENT_DATE - INTERVAL '180 days', - created_at < CURRENT_DATE - INTERVAL '180 days', +ORDER BY created_at::date >= CURRENT_DATE - INTERVAL '30 days', + created_at::date < CURRENT_DATE - INTERVAL '30 days' + AND created_at::date > CURRENT_DATE - INTERVAL '180 days', + created_at::date < CURRENT_DATE - INTERVAL '180 days', days_since_registration; -- Ответ на вопросы -- 1. В сегментации по возрасту показывает возраст пользователя,