这是架构:
create table Retailer (
row bigint,
id uniqueidentifier,
name varchar(255),
domainName varchar(MAX)
)
create table SalesPeople
( Row bigint not null identity,
ID uniqueidentifier not null,
Retailer_ID uniqueidentifier not null,
FirstName nvarchar(255) not null,
LastName nvarchar(255) not null,
EmailAddress nvarchar(511) ,
PhoneNumber nvarchar(255)
)
orders (
row bigint,
id uniqueidentifier,
Retailer_ID uniqueidentifier,
salesperson_id uniqueidentifier,
prod_id uniqueidentifier,
date datetime
)
我们正在设计一个查询,报告销售人员以及他们为特定零售商生成的订单数量。此外,如果马克和比尔被捆绑,但比尔斯的订单更近,比尔将需要出现在马克之上。此外,生成大多数订单的人需要显示在列表的最顶层。
据零售商EBAY说,销售数据显示,约翰在2012年1月订购了2000个订单,比尔在2010年1月订购了999个订单,在2013年8月订购了1个订单,而马克在2013年6月订购了1000个订单,并且Marry 2010年7月订购了700份订单,2013年7月订购了150份订单。产量看起来像这样:
Sales Person #ofOrdersCreate
John 2000
Bill 1000
Mark 1000
Marry 850
我们尝试的查询是:
select s.firstname + ' '+s.LastName , COUNT(o.id) from Orders o
inner join SalesPeople s on s.ID=o.Retailer_ID
inner join Retailers r on r.id = o.retailer_id
where r.name='EBAY'
group by s.firstname + ' '+s.LastName
order by o.date
但是我们从上面的join语句中得到错误,因为我们无法对数据进行排序,因为它不包含在聚合函数或GROUP BY子句中。
答案 0 :(得分:1)
您有两个问题:
sum
或您的要求max
)。 group by
应该在集体列s.firstname, s.lastname
上,而不是它们的聚合。所以这样修理:
select s.firstname + ' '+s.LastName , COUNT(o.id) from Orders o
inner join SalesPeople s on s.ID=o.Retailer_ID
inner join Retailers r on r.id = o.retailer_id
where r.name='EBAY'
group by s.firstname, s.LastName
order by count(o.id) DESC, max(o.date)
答案 1 :(得分:1)
请立即尝试:
select s.firstname + ' '+s.LastName , COUNT(o.id) from Orders o
inner join SalesPeople s on s.ID=o.Retailer_ID
inner join Retailers r on r.id = o.retailer_id
where r.name='EBAY'
group by s.firstname + ' '+s.LastName
order by COUNT(o.id)