我想获得MAX
的{{1}}值并显示相应的SalesMade
和Employee.FirstName
。此查询返回每个员工的销售计数。你能帮我算出MAX值吗?我不熟悉子查询。提前致谢。
Employee.LastName
答案 0 :(得分:0)
您不需要子查询。假设您的确意味着总销售额而不是每天的销售额:
SELECT top 1 e.FirstName, e.LastName, COUNT(*) AS SalesMade
FROM Employees e INNER JOIN
Sales s
ON e.EmployeeId = s.EmployeeID
GROUP BY e.EmployeeId, e.FirstName, e.LastName
ORDER BY SalesMade desc;
top 1
仅返回第一行,由于order by
子句,这将是最大行。
答案 1 :(得分:0)
我的主要问题是什么是业务逻辑?
您是否想要获得每天,每月或每年销售额最高的员工的姓名?
另外,您是在寻找销售总数还是最高销量?
这些都可以是有效的查询。
我喜欢创建几个测试表并将它们加载到tempdb中,以便使用示例主键和外键来播放(销售/员工)。
由于HOBBIT在电影中,我在12月24日以12/26的价格销售了Bilbo 2,并在12月26日进行了1次销售。另一方面,Gandalf在12月24日进行了1次销售,在12月26日有3次销售
-- Just playing around
use tempdb;
go
-- employee table
if object_id('employees') > 0
drop table employees
go
create table employees
(
employee_id int identity(1,1) primary key,
first_name varchar(25),
last_name varchar(25)
);
go
-- add data
insert into employees values
('bilbo', 'baggins'),
('gandalf', 'the grey');
go
-- show data
select * from employees
go
-- sales table
if object_id('sales') > 0
drop table sales
go
create table sales
(
sales_id int identity(1,1) primary key,
employee_id int,
sales_date datetime,
sales_amount money
);
-- add data
insert into sales values
(1, '12/24/2013', 100),
(1, '12/24/2013', 200),
(2, '12/24/2013', 300),
(2, '12/26/2013', 100),
(2, '12/26/2013', 200),
(2, '12/26/2013', 300),
(1, '12/24/2013', 100);
go
-- make sure their is integrity
alter table sales add constraint [fk_employee_id]
foreign key (employee_id) references employees (employee_id);
-- show data
select * from sales
go
此简单查询返回每位员工每天的总销售额。
-- Total Sales per Day per employee
SELECT
s.sales_date,
e.last_name,
e.first_name,
COUNT(*) AS total_sales
FROM employees e INNER JOIN sales s
ON e.employee_id = s.employee_id
GROUP BY
s.sales_date,
e.last_name,
e.first_name
我注意到你最后在月份和年份添加了DATEPART?您是否想要每月获得销售额?
-- Total Sales per Month per employee
SELECT
datepart(yyyy, s.sales_date) * 100 + datepart(mm, s.sales_date) as date_key,
e.last_name,
e.first_name,
COUNT(*) AS total_sales
FROM employees e INNER JOIN sales s
ON e.employee_id = s.employee_id
GROUP BY
datepart(yyyy, s.sales_date) * 100 + datepart(mm, s.sales_date),
e.last_name,
e.first_name
ORDER BY total_sales desc;
简而言之,前1名只会在您查看特定日期或月份时提供帮助。如果您希望在一天或几个月的范围内看到每日或每月的最佳销售人员,将无效。
请澄清业务逻辑,以便我能为您提供准确的解决方案。