按许多商店的总费用查询和订购

时间:2017-01-08 16:42:34

标签: sql

我在下面的图片中有一个数据库架构。 Here is a database schema online

例如,客户想要购买:

service 1 quantity 5
service 2 quantity 2

我想找一家有服务1和2的商店,并按总价订购。

我是否需要首先查询提供这些服务的所有商店。

然后运行循环以按总价计算total_price和订单?

有没有人有更好的解决方案? 请建议我。 谢谢

Screen Shot 2017-01-09 at 12.21.56 AM.png

1 个答案:

答案 0 :(得分:0)

我建议将客户想要购买的服务存储在临时表中,例如quotation,以便后续的sql查询可以处理请求的serviceIdquantity的组合。

临时表仅存在于当前会话中,不与其他会话冲突,并在会话结束时自动销毁。许多数据库支持临时表,但语法不同。

当您使用MySQL在SQLFiddle上发布示例时,我提供了基于MySQL语法的解决方案(以及MySQL中的临时表限制)。注意:似乎SQLFiddle无法处理临时表;因此,我将您的架构和我的扩展程序复制到rextester.com

CREATE TEMPORARY TABLE IF NOT EXISTS request (
  serviceId int,
  quantity int
);

insert into quotation (serviceId, quantity) values (1,5), (2,2);

create temporary table nrOfServices as (select count(distinct serviceId) as nr from quotation);

请注意,MySql不允许在同一查询中使用两次临时表,这对于以下查询是必需的。因此,引入了计数所请求服务数量的辅助表nrOfServices(再次临时)。

然后,以下查询应检索所有可以提供所有请求服务的商店以及总价格:

select ss.storeId, sum(ss.price * r.quantity) as total
from store_service ss join quotation r on ss.serviceId = r.serviceId
group by ss.storeId
having count(ss.serviceId) = (select nr from nrOfServices)
order by total desc