我有一个客户表,一个项目表和一个包含以下列的交易表:
客户 - ID,名称
项目 - ID,描述
交易 - ID,CustID(外键客户(ID)),ItemID(外键项(ID))
使用此查询,任何人都可以帮我创建一个查询来回答以下问题:
如果特定客户参与了涉及给定ItemID的交易(即客户购买了特定商品),则返回客户所涉及的交易总数的计数。诀窍(和部分)我不能自己解决)是如何在计数中包含不涉及查询中使用的ItemID的事务。
答案 0 :(得分:2)
您可以通过两个步骤解决此问题:
撰写一个返回相关客户的查询'标识。如果您将该查询编写为子查询或CTE(常用表表达式,即WITH
子句),您甚至不需要将结果放在临时表中。
将结果表从(1)加入到事务表中(以过滤掉您不感兴趣的所有事务),然后按客户ID分组(以便您可以在SELECT
子句,并选择COUNT(DISTINCT TransactionId)
。
这些方面的东西:
WITH relevantCustomers (CustomerId) AS
(
SELECT DISTINCT CustomerId
FROM Transactions
WHERE ItemId = 123
)
SELECT t.CustomerId, COUNT(DISTINCT t.TransactionId)
FROM Transactions t
INNER JOIN relevantCustomers rc ON t.CustomerId = rc.CustomerId
GROUP BY t.CustomerId
这为您提供了一组购买项目123的所有客户(按其ID),以及每项客户的交易总数。
如果您只对一个特定客户感兴趣,可以在"外部"中添加WHERE
条款。查询按该客户的ID过滤。
答案 1 :(得分:0)
select count(*) from Transaction where CustID in (select CustID from Transaction where CustID = 123 and ItemID = 456)
如果客户123没有参与项目456的事务,则查询将返回0,因为子查询中没有custid条目。
答案 2 :(得分:0)
对于“如果特定客户参与了涉及给定ItemID的交易” - 您的意思是您拥有客户ID和产品ID?如果是这样的话,您可以写 -
SELECT * FROM TRANSACTION
where CUSTID={"your customer id"}
and ItemID = {"Required Item ID"} ;
对于第二部分,您可以尝试这样的事情:
Select count(*) from TRANSACTION
where CUSTID={"your customer id"}
and ItemID = {"Required Item ID"} ;
您可以使用SQL查询here来更好地理解SQL。
此致 Paritosh
答案 3 :(得分:0)
我已经提出了以下问题的答案:
SELECT Name, Count(Name)
FROM customer c
JOIN transaction t
ON c.ID = t.CustID
WHERE CustID IN (SELECT CustID
FROM transaction
WHERE ItemID = 2);
向Stakx道歉,我在寻找答案的同时你显然提供答案。