/ / Jak napisać zapytanie SQL, które znajdzie częstych klientów firmy w tym modelu danych? - sql

Jak napisać zapytanie SQL, które znajduje częstych klientów dla firmy w tym modelu danych? - sql

Mój model wygląda następująco:

  • Firma ma N lokalizacji.
  • Lokalizacja ma N transakcji.
  • Każda transakcja ma klienta.
  • Każda transakcja należy do grupy transakcji.

Jak napisać zapytanie, że znajduje wszystkich klientów, którzy mają co najmniej K grup transakcji w określonej firmie, gdzie K jest liczbą całkowitą? (Chcę, żeby wynik zawierał danego klienta nie więcej niż raz.)

Odpowiedzi:

4 dla odpowiedzi № 1

Posługiwać się having!

select
c.CustomerID,
count(distinct tg.TransactionGroupID) as GroupCount
from
Customers c
inner join Transaction t on
c.CustomerID = t.CustomerID
inner join Location l on
t.LocationID = l.LocationID
inner join Business b on
l.BusinessID = b.BusinessID
inner join TransactionGroup tg on
t.TransactionGroupID = tg.TransactionGroupID
where
b.BusinessName = "Some business"
group by c.CustomerID
having count(distinct tg.TransactionGroupID) > 4

Jeśli nie potrzebujesz informacji o grupie transakcji, możesz po prostu dołączyć do tabeli transakcji i zrezygnować z drugiego łączenia.

Użyłem tutaj „4”, ale możesz użyć parametru lub innej liczby całkowitej, która Ci odpowiada.


1 dla odpowiedzi nr 2
SELECT Customerid
From Transaction t
INNER JOIN TransactionGroup tg
ON t.transactionid = tg.transactionid
GROUP BY Customerid
HAVING COUNT(DISTINCT TransactionGroup) => @TransactionCountDesired

To jest sedno, może być konieczne rozszerzenie JOINs dalej.

Tak długo jak ty GROUP BY klienta i mieć COUNT(DISTINCT...) dla Twojego HAVING sprawdź liczbę grup transakcji, z którymi nie będziesz miał do czynienia z oszustami.