私のモデルは、次の行に沿っています:このデータモデルでビジネスの頻繁な顧客を検出するSQLクエリを作成するにはどうすればよいですか?
- ビジネスにはNの場所があります。
- ロケーションにNトランザクションがあります。
- 各取引には顧客があります。
- 各トランザクションはトランザクショングループに属します。
にはどうすればKは整数ある特定のビジネス、少なくともKトランザクション・グループを持っているすべての顧客を見つけたクエリを書くのですか? (私は結果が与えられた顧客を一度に含むことを望みません)
私のモデルは、次の行に沿っています:このデータモデルでビジネスの頻繁な顧客を検出するSQLクエリを作成するにはどうすればよいですか?
にはどうすればKは整数ある特定のビジネス、少なくともKトランザクション・グループを持っているすべての顧客を見つけたクエリを書くのですか? (私は結果が与えられた顧客を一度に含むことを望みません)
使用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
トランザクショングループ情報が必要ない場合は、トランザクションテーブルに参加して2回目の参加を控えることができます。
ここでは「4」を使用しましたが、あなたの気に入ったパラメータや別の整数を自由に使用してください。
+1、私にそれを打つ:) –
これはビジネスを参照していないようです。彼らは彼らがどんな仕事をしているにせよ、これはすべての取引を得ることはできませんか? –
ビジネスに参加者を追加しました。 – Eric
SELECT Customerid
From Transaction t
INNER JOIN TransactionGroup tg
ON t.transactionid = tg.transactionid
GROUP BY Customerid
HAVING COUNT(DISTINCT TransactionGroup) => @TransactionCountDesired
これは要点ですので、JOIN
をさらに展開する必要があります。
お客様がGROUP BY
お客様で、HAVING
の取引を確認するためにCOUNT(DISTINCT...)
の小切手をお持ちでない場合は、対処する必要がありません。
将来のテーブル構造を簡単に投稿できます。あなたの後ろのアイデアを得るためにテーブルの中に鉛筆を塗る必要がありました。 – JonH
@JonH:明確でないことに対する謝罪。私は次回より明示的になるでしょう。 –