首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重复采购之和

重复采购之和
EN

Stack Overflow用户
提问于 2018-01-20 19:21:03
回答 1查看 43关注 0票数 1

我正在尝试编写一个查询,从employee_id列表中选择并找到重复的图书购买(book_id)和相关的成本节约(list_price)。如果一个副本存在,它需要复制书_id数量的价格之和。

因此,如果某人有一本与他们的employee_id相关的10美元的书,而这本书又提供给他们,他们就不用再买了,而且节省了10美元。如果再发生这种情况,就会节省20美元。

我尝试了一个having>1,但是我似乎无法正确地获得正确的查询来精确地总结节省的费用。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 19:49:01

首先,

代码语言:javascript
运行
复制
select employee_id, book_id, count(*)
from book_purchases
group by employee_id, book_id
having count(*) > 1

给你需要的名单。

如果我们不必担心价格的变化,那么我们只需添加一两列就可以得到:

代码语言:javascript
运行
复制
select employee_id, book_id, 
    count(*) as copies_purchased, 
    sum(list_price) as total_spent,
    count(*) - 1 as copies_unnecessarily_purchased, 
    (count(*) - 1) * avg(list_price) as amount_overspent
from book_purchases
group by employee_id, book_id
having count(*) > 1

当然,您可以加入到员工和预订表,以获得名称和标题,以增加一些结果。

要获得每个员工超支的总额,您可以这样包装上面的查询:

代码语言:javascript
运行
复制
select a.employee_id, sum(a.amount_overspent) as total_amount_overspent
from (
        select employee_id, book_id, 
            count(*) as copies_purchased, 
            sum(list_price) as total_spent,
            count(*) - 1 as copies_unnecessarily_purchased, 
            (count(*) - 1) * avg(list_price) as amount_overspent
        from book_purchases
        group by employee_id, book_id
        having count(*) > 1    
    ) as a 
group by a.employee_id

最后,我走到一张员工桌旁,我认为这是我在做这件事的时候所拥有的:

代码语言:javascript
运行
复制
select a.employee_id, emp.employee_name, sum(a.amount_overspent) as total_amount_overspent
from (
        select employee_id, book_id, 
            count(*) as copies_purchased, 
            sum(list_price) as total_spent,
            count(*) - 1 as copies_unnecessarily_purchased, 
            (count(*) - 1) * avg(list_price) as amount_overspent
        from book_purchases
        group by employee_id, book_id
        having count(*) > 1    
    ) as a 
inner join employee as emp on emp.employee_id = a.employee_id
group by a.employee_id, emp.employee_name

要明确的是,这不是四个单独的查询;它们只是构建最后看到的单个查询的中间阶段。

我希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48360177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档