我有两个表,Customer
列CustomerID, FirstName, Address
和Purchases
列PurchaseID, Qty, CustomersID
。
我想创建一个查询,显示已购买两件以上产品的FirstName,产品数量由数量表示。
我似乎无法解决这个问题 - 我刚刚开始使用T-SQL
答案 0 :(得分:0)
您可以对购买进行求和,并使用having
子句过滤您感兴趣的内容。然后,您可以使用in
运算符仅查询符合这些ID的客户名称:
SELECT FirstName
FROM Customer
WHERE CustomerID IN (SELECT CustomerID
FROM Purchases
GROUP BY CustomerID
HAVING SUM(Qty) > 2)
答案 1 :(得分:0)
请试试这个:
select c.FirstName,p.Qty
from Customer as c
join Purchase as p
on c.CustomerID = p.CustomerID
where CustomerID in (select CustomerID from Purchases group by CustomerID having count(CustomerID)>2);
答案 2 :(得分:0)
请尝试这个,根据你的问题它应该适合你。
cascade = CascadeType.ALL
答案 3 :(得分:0)
SELECT
c.FirstName
FROM
Customer c
INNER JOIN Purchases p
ON c.CustomerId = p.CustomerId
GROUP BY
c.FirstName
HAVING
SUM(p.Qty) > 2
虽然IN建议可行,但它们有点矫枉过正,而且可能比使用聚合的直接连接更不具备性能。诀窍是HAVING Clause使用它你可以将结果限制在你想要的名字。这是一个链接,可以了解有关IN与Exists vs JOIN(NOT IN vs NOT EXISTS)
的更多信息有很多方法可以实现这一点,并向您介绍窗口函数和常用表格表达式,这些表达式在这个简化示例中非常有用,但在您的工具集中非常宝贵,因为您的查询会继续变得更加复杂:
;WITH cte AS (
SELECT DISTINCT
c.FirstName
,SUM(p.Qty) OVER (PARTITION BY c.CustomerId) as SumOfQty
FROM
Customer c
INNER JOIN Purchases p
ON c.CustomerId = p.CustomerId
)
SELECT *
FROM
cte
WHERE
SumOfQty > 2