Sql 指定所有行在另一个表中至少出现特定次数
我正在使用这个示例,我想在表Sql 指定所有行在另一个表中至少出现特定次数,sql,join,group-by,having,Sql,Join,Group By,Having,我正在使用这个示例,我想在表Customers和Orders上编写一个查询,该查询提供了所有已下了2个以上订单的客户。尽管我通过查询实现了这一点: Select Customers.* From Customers Where Customers.CustomerID IN( Select Orders.CustomerID From Orders Group by Orders.CustomerID Having count(*)>2 ); SELECT Customers.* FRO
Customers
和Orders
上编写一个查询,该查询提供了所有已下了2个以上订单的客户。尽管我通过查询实现了这一点:
Select Customers.*
From Customers
Where Customers.CustomerID IN(
Select Orders.CustomerID
From Orders
Group by Orders.CustomerID
Having count(*)>2
);
SELECT Customers.*
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID
GROUP BY Customers.CustomerID
HAVING COUNT(*)>2;
我不明白为什么会有这样的疑问:
Select Customers.*
From Customers
Where Customers.CustomerID IN(
Select Orders.CustomerID
From Orders
Group by Orders.CustomerID
Having count(*)>2
);
SELECT Customers.*
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID
GROUP BY Customers.CustomerID
HAVING COUNT(*)>2;
不能给出相同的结果。来自数据库的消息是:
“无法对使用“*”选择的字段进行分组(客户)。”
我觉得它应该可以工作,因为Customers.CustomerID
包含在Select
语句中的required列中。问题是什么?我如何修改第二个查询才能工作,即使它可能会排除多余的语句 来自
GROUP BY语句与聚合一起使用
函数按一列或多列对结果集进行分组
因此,要使用聚合,您需要指定聚合的列,并且不能使用*
您必须在
SELECT
和groupby
子句中明确指定列。在SELECT
语句中指定所需的列:
SELECT Customers.CustomerID, Customers.CustomerName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID
GROUP BY Customers.CustomerID, Customers.CustomerName
HAVING COUNT(*)>2;
第一个解决方案实际上由两个查询组成 第二部分通过列出CustomerID来确定退货客户
Select o.CustomerID
From Sales.SalesOrderHeader o
Group by o.CustomerID
Having count(*)>2
第一部分使用第二次查询得到的返回客户列表显示客户详细信息
Select c.*
From Sales.Customer c
Where
c.CustomerID IN(
...
);
尝试使用订单表上的Group By语法获取dublicate客户ID时,无法返回所有客户数据
但这里可以使用带有PARTITION By子句的SQL聚合函数(下面的Count函数)代替Group By
请查看教程并查看以下查询
select * from (
SELECT distinct
c.*,
COUNT(o.SalesOrderID) over (partition by c.CustomerId) cnt
FROM Sales.SalesOrderHeader o
INNER JOIN Sales.Customer c ON o.CustomerID = c.CustomerID
) t where cnt > 1
我已经尝试了你的建议,它的工作,但它只提供ID。为了获得完整信息,我需要将其放入子查询中,并在外部查询中将其与In或EXISTS进行匹配。它可以在这些特定表上运行,但我想知道如果两个客户的名称相同,是否会出现问题。可能不会,因为两者都是分组的。我说得对吗?你说得对,但在这种情况下,你应该从
选择和分组方式中删除客户。CustomerID