Faydalı fonksiyonlar özeti

SQL ile İş Verilerini Analiz Etme

Michel Semaan

Data Scientist

Tarihlerle çalışmak

  • DATE_TRUNC('quarter', '2018-08-13')'2018-07-01 00:00:00+00:00'
  • '2018-07-01 00:00:00+00:00' :: DATE'2018-07-01'

Raporlarda tarihler

  • İnsan tarafından okunabilir tarih formatı raporlamada önemlidir
  • Varsayılan tarih biçimi '2018-08-13' çok okunaklı değildir
  • '2018-08-13' ifadesini 'Friday 13, August 2018' biçimine nasıl dönüştürürsünüz?

Çözüm

  • TO_CHAR('2018-08-13', 'FMDay DD, FMMonth YYYY')'Friday 13, August 2018'
SQL ile İş Verilerini Analiz Etme

TO_CHAR()

  • TO_CHAR(DATE, TEXT) → TEXT (biçimlendirilmiş tarih dizesi)
  • Örnek: Dy → Kısaltılmış gün adı (Mon, Tues, vb.)

    • TO_CHAR('2018-06-01', 'Dy') → 'Fri'
    • TO_CHAR('2018-06-02', 'Dy') → 'Sat'
  • Biçim dizesindeki kalıplar tarihte temsil ettikleriyle değiştirilir; diğer karakterler olduğu gibi kalır

  • Örnek: DD → Gün numarası (01 - 31)
    • TO_CHAR('2018-06-01', 'Dy - DD') → 'Fri - 01'
    • TO_CHAR('2018-06-02', 'Dy - DD') → 'Sat - 02'
SQL ile İş Verilerini Analiz Etme
Pattern Açıklama
FMDay Günün tam adı (Monday, Tuesday, vb.)
MM Yılın ayı (01 - 12)
Mon Ay adının kısaltması (Jan, Feb, vb.)
FMMonth Ayın tam adı (January, February, vb.)
YY Yılın son 2 hanesi (18, 19, vb.)
YYYY Dört haneli yıl (2018, 2019, vb.)

Dokümantasyon: https://www.postgresql.org/docs/9.6/functions-formatting.html

SQL ile İş Verilerini Analiz Etme

Sorgu

SELECT DISTINCT
  order_date,
  TO_CHAR(order_date,
          'FMDay DD, FMMonth YYYY') AS format_1,
  TO_CHAR(order_date,
          'Dy DD Mon/YYYY') AS format_2
FROM orders
ORDER BY order_date ASC
LIMIT 3;

Sonuç

order_date  format_1                format_2       
----------  ----------------------  ---------------
2018-06-01  Friday 01, June 2018    Fri 01/Jun 2018
2018-06-02  Saturday 02, June 2018  Sat 02/Jun 2018
2018-06-02  Sunday 03, June 2018    Sun 03/Jun 2018
SQL ile İş Verilerini Analiz Etme

Pencere fonksiyonları tekrar

  • SUM(...) OVER (...): Bir sütunun kümülatif toplamını hesaplar
    • Örnek: SUM(registrations) OVER (ORDER BY registration_month) kayıtların kümülatif toplamını hesaplar
  • LAG(...) OVER (...): Önceki satırın değerini getirir
    • Örnek: LAG(mau) OVER (ORDER BY active_month) önceki ayın aktif kullanıcılarını (MAU) döndürür
  • RANK() OVER (...): Sıralı düzende konuma göre her satıra bir derece atar
    • Örnek: RANK() OVER (ORDER BY revenue DESC) gelire göre kullanıcıları, işletmeleri veya ayları derecelendirir
SQL ile İş Verilerini Analiz Etme

Sorgu

SELECT
  user_id,
  SUM(meal_price * order_quantity) AS revenue
FROM meals
JOIN orders ON meals.meal_id = orders.meal_id
GROUP BY user_id
ORDER BY revenue DESC
LIMIT 3;

Sonuç

user_id  revenue
-------  -------
18       626
76       553.25
73       537
SQL ile İş Verilerini Analiz Etme

Sorgu

WITH user_revenues AS (
  SELECT
    user_id,
    SUM(meal_price * order_quantity) AS revenue
  FROM meals
  JOIN orders ON meals.meal_id = orders.meal_id
  GROUP BY user_id)

SELECT
  user_id,
  RANK() OVER (ORDER BY revenue DESC)
    AS revenue_rank
FROM user_revenues
ORDER BY revenue_rank DESC
LIMIT 3;

Sonuç

user_id  revenue_rank
-------  ------------
18       1
76       2
73       3
SQL ile İş Verilerini Analiz Etme

Faydalı fonksiyonlar özeti

SQL ile İş Verilerini Analiz Etme

Preparing Video For Download...