Wpis z mikrobloga

hej, potrzebuje pomocy z zapytaniem, mianowicie muszę uzyskać listę klientów, którzy nigdy nie skorzystali z danego typu płatności (przyjmijmy tą płatność jako id=1) i wykorzystali inne typy płatności przynajmniej 2 razy (dla id <> 1). Moje pytanie na stackoverflow: https://stackoverflow.com/questions/74559593/how-to-exclude-clients-that-have-never-used-exact-payment-method
#sql
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mrMarshalX: dostaje id klienta ale jak sprawdzam sobie po jego id to mógł on korzystać z p.paymentmethod= 1 tylko nie jest ona zliczana w moim zapytaniu, więc to nie do końca działa. Czyli dla idclienta mam zliczone COUNT(DISTINCT p.paymentmethod) = 2 bo where wyklucza p.paymentmethod = 1 ale bez where miałby zliczone payment_method = 3
  • Odpowiedz
@Tomz: With X as (select count(*) a, customerid from payments where paymentmethod<>1 group by customerid having count(*)>1)
Select distinct customerid from X where not exists (select customerid from payments p where paymentmethod=1 and p.customerid=x.customerid)

Jakoś tak bym kombinował
  • Odpowiedz
@Tomz: ja bym zrobił CTE, w którym wybierzesz klientów, którzy użyli tej metody płatności, a później w warunku wyłączysz tych klientów. W twoim obecnym zapytaniu ignorowane są wiersze, w których występuje ten rodzaj płatności, ale nie wykluczasz samego klienta.

with clients (id) as (
select distinct p.clientid from payment p where p.paymentmethod =
  • Odpowiedz
@michal985: @Drmscape2: dzięki, chyba mnie naprowadziliście bo kominbowałem z wyciągnięciem bazy klientów z payment_method = 1 i wykluczeniem jej z zapytania ale nie bardzo wiedziałem jak. CTE mi coś nie działa w MySQL ale wyczytałem, że działa podzapytanie i chyba mam to :)
  • Odpowiedz