2011-12-15 24 views
2

我的模式是沿着以下幾點:如何編寫一個SQL查詢以查找此數據模型中業務的頻繁客戶?

  • 業務有N個位置。
  • 一個地點有N筆交易。
  • 每筆交易都有一位客戶。
  • 每筆交易都屬於一個交易組。

如何編寫一個查詢,查找所有誰擁有在特定的業務至少k事務組客戶,其中K爲整數? (我希望結果包含給定客戶不超過一次。)

+0

它更容易在將來發布表結構。我不得不在你的桌子上鉛筆,以便了解你以後的想法。 – JonH 2011-12-15 20:07:21

+0

@JonH:道歉不清楚。下次我會更加明確。 – 2011-12-15 20:11:48

回答

4

使用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 

如果您不需要事務組信息,則可以加入事務表並放棄第二次連接。

我在這裏使用了「4」,但隨意使用一個參數或其他適合您喜歡的整數。

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

這是要點,您可能需要進一步擴展JOIN s。

只要你GROUP BY客戶,並有一個COUNT(DISTINCT...)爲您的HAVING檢查交易組數你不會有任何處理方式。