gpt4 book ai didi

mysql - 这是一个使用 GROUP BY 和 ORDER BY 的 SQL 连接,它会生成一个包含 # 个订单的报告,但它不起作用

转载 作者:行者123 更新时间:2023-11-29 02:27:44 28 4
gpt4 key购买 nike

这是架构:

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
)

我们正在设计一个查询,该查询将报告销售人员以及他们为特定零售商生成的订单数量。此外,如果 Mark 和 Bill 并列,但 Bills 的订单更晚,则 Bill 需要出现在 Mark 之上。此外,产生最多订单的人需要出现在列表的最顶部。

比如说零售商 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

但我们从上面的连接语句中得到错误,因为我们无法对数据进行排序,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

最佳答案

你有两个问题:

  1. 因为您的分组结果将包含多个可能的日期,您需要在排序依据中包含该字段(这对您试图完成的事情不起作用)或对返回的结果组使用聚合函数 (如 sum 或在您的要求中,max)。
  2. 您的分组依据 应该位于集合列 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)

关于mysql - 这是一个使用 GROUP BY 和 ORDER BY 的 SQL 连接,它会生成一个包含 # 个订单的报告,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536622/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com