如何编写SQL查询以查找此数据模型中业务的常用客户?

时间:2011-12-15 19:58:51

标签: sql

我的模型如下:

  • 企业有N个地点。
  • 某个地点有N笔交易。
  • 每笔交易都有客户。
  • 每笔交易都属于一个交易组。

如何编写查找在特定企业中至少拥有K个交易组的所有客户的查询,其中K是整数? (我希望结果只包含给定客户一次。)

2 个答案:

答案 0 :(得分: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 :(得分:1)

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客户COUNT(DISTINCT...)对您的HAVING检查交易组计数,您就不会有任何欺诈行为。