• 10-09-2021, 20:27:52
    #1
    Selamlar,
    PostgreSQL ve nodeJS ile bir proje geliştiriyorum.
    Projemde şöyle birşeye ihtiyacım var:
    bir tablo çiziyorum örnek görüntüsü aşağıda:

    Bu tabloyu çizmek için şöyle bir obje kullanıyorum:
    dailyOrdersChart: {
            data: {
              labels: ["PT", "S", "Ç", "P", "C", "CT", "P"],
              series: [[1, 2, 3, 4, 5, 6, 7]],
            },
            options: {
              low: 0,
              high: 10,
            },
          },
    Objedende görüleceğe üzere bir array içinde haftanın her gününe ait alınan siparişleri listeliyorum.
    işlerin bir frontendcide karıştığı nokta olan SQL sorgusuna gelince biraz bocaladım diyebiliriz.

    DB örneğim şu şekilde:


    kullanici tablosundaki 1 ve 2 olanlar sisteme üye olan ve kullananlara atadığımız bir id,
    musteriid dediğimiz ise siparişi veren kişiler.

    createdAt sütununa göre DB yi en az yoracak şekilde üstteki tablonun istediği verileri nasıl çekebilirim?
    beklenilen sonuç:
    ilk satır idsi 2 olan kullanıcıya ait olduğundan onu istemiyoruz.



    bu haftanın ilk günü: 06.09.2021 ve o güne ait sipariş yok = 0
    07.09.2021 = 0
    08.09.2021 = 1
    09.09.2021 = 3
    10.09.2021 = 1
    11.09.2021 = 0 (Henüz o güne gelmedik)
    12.09.2021 = 0 (Henüz o güne gelmedik)
    sonuç olarak şöyle bir tablo işimi görebilir gibi duruyor:
    date | orderCount
    06.09.2021 | 0
    07.09.2021 | 0
    08.09.2021 | 1
    09.09.2021 | 3
    10.09.2021 | 1
    11.09.2021 | 0
    12.09.2021 | 0


    Şimdiden teşekkür ederim
  • 10-09-2021, 21:09:32
    #2
    select 
      COUNT(*) as count,
      date_trunc('day', orders.createdAt) as day
    from orders
    WHERE orders.createdAt BETWEEN date_trunc('week', current_date) AND date_trunc('week', current_date) + INTERVAL '6 days'
    GROUP BY orders.createdAt

    Bu şekilde sonuç geliyor, veri yoksa 0 yazdırırsınız.
  • 10-09-2021, 22:12:20
    #3

    Bendeki sonuç bu şekilde geldi hocam.
  • 11-09-2021, 00:49:17
    #4
    sorgu dogru gibi duruyor
    sadece group by yanlis gibi
    birde direkt day number i cekebilirsin DOW olmasi lazim

    
    select
      COUNT(*) as count,
      date_trunc('day', orders.createdAt) as day
    from orders
    WHERE orders.createdAt BETWEEN date_trunc('week', current_date) AND date_trunc('week', current_date) + INTERVAL '6 days'
    GROUP BY 2
  • 11-09-2021, 01:36:22
    #5
    suleymanyaldiz adlı üyeden alıntı: mesajı görüntüle
    sorgu dogru gibi duruyor
    sadece group by yanlis gibi
    birde direkt day number i cekebilirsin DOW olmasi lazim

    
    select
      COUNT(*) as count,
      date_trunc('day', orders.createdAt) as day
    from orders
    WHERE orders.createdAt BETWEEN date_trunc('week', current_date) AND date_trunc('week', current_date) + INTERVAL '6 days'
    GROUP BY 2
    Teşekkür ederim hocam Ellerinize sağlık