Gerçek veri kirlidir
raw_signups tablosu bir formdan gelen ham kayıtları içerir. Bak:
SELECT * FROM raw_signups LIMIT 12;
Sorunlar: adlarda baş/son boşluk ve karışık harf, e-postalarda büyük harf, şehirlerde 'istanbul'/'ISTANBUL'/' Ankara', boş metin ve NULL, iki farklı tarih biçimi, tekrar eden satırlar.
Adım adım temizlik
SELECT id,
TRIM(full_name) AS ad,
LOWER(TRIM(email)) AS email,
CASE
WHEN LOWER(TRIM(city)) IN ('istanbul', 'İstanbul') OR UPPER(TRIM(city)) = 'ISTANBUL' THEN 'İstanbul'
WHEN LOWER(TRIM(city)) = 'ankara' THEN 'Ankara'
WHEN LOWER(TRIM(city)) IN ('izmir', 'İzmir') THEN 'İzmir'
ELSE NULLIF(TRIM(city), '')
END AS sehir,
CASE
WHEN signup_date LIKE '__.__.____'
THEN substr(signup_date, 7, 4) || '-' || substr(signup_date, 4, 2) || '-' || substr(signup_date, 1, 2)
ELSE signup_date
END AS kayit_tarihi
FROM raw_signups;
Türkçe İ/ı sorunuSQLite'ın LOWER fonksiyonu
'İ' harfini dönüştürmez. Bu yüzden eşleme tablosuna her iki yazımı da koyduk. Gerçek projelerde bir eşleme (mapping) tablosu tutmak en sağlam yoldur.Tekrarları atmak
SELECT COUNT(*) AS satir,
COUNT(DISTINCT id) AS farkli_id,
COUNT(DISTINCT LOWER(TRIM(email))) AS farkli_email
FROM raw_signups;