Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按多个门店的总费用查询和订购_Sql - Fatal编程技术网

Sql 按多个门店的总费用查询和订购

Sql 按多个门店的总费用查询和订购,sql,Sql,我在下图中有一个数据库模式。 例如,客户想要购买: service 1 quantity 5 service 2 quantity 2 我想找一家有服务1和服务2,并按总价订购的商店 我是否需要首先查询所有提供这些服务的商店 然后运行循环以计算总价和按总价排序的订单 有谁有更好的解决方案吗? 请推荐我。 多谢各位 我建议将客户想要购买的服务存储在一个临时表中,例如QUOTE,这样请求的serviceId和数量的组合就可以通过后续的sql查询来处理 临时表仅存在于当前会话中,与其他会话不冲突,

我在下图中有一个数据库模式。

例如,客户想要购买:

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

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

然后运行循环以计算总价和按总价排序的订单

有谁有更好的解决方案吗? 请推荐我。 多谢各位


我建议将客户想要购买的服务存储在一个临时表中,例如QUOTE,这样请求的serviceId和数量的组合就可以通过后续的sql查询来处理

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

当您在使用MySQL的SQLFiddle上发布一个示例时,我提供了一个基于MySQL语法和MySQL中临时表限制的解决方案。注意:SQLFIDLE似乎无法处理临时表;因此,我将您的模式和扩展复制到

如果请求不存在,则创建临时表 serviceId int, 数量整数 ; 在报价单serviceId中插入数量值1,5,2,2; 创建临时表nrOfServices作为从报价单中选择countdistinct serviceId作为nr; 请注意,MySql不允许在同一查询中两次使用临时表,这对于下面的查询是必需的。因此,引入了助手表nrOfServices,再次临时计算请求的服务数量

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

选择ss.storeId、sumss.price*r.QUOTE作为总计 从存储\服务ss加入ss.serviceId=r.serviceId上的报价单r 按ss.storeId分组 having countss.serviceId=从nrOfServices中选择nr 按总说明订购
请使用db平台进行标记。显示示例表数据和预期输出。您的问题,并添加一些样本数据和基于该数据的预期输出。请问,你所说的有数量的服务是什么意思?StoreService表中没有名为quantity的列。一家商店能提供很多完全相同的服务吗?那么为什么它们应该在不同的行中呢?有一个名为available的字段,我假设您想要所有available=1服务。很抱歉我的英语不好。我刚刚更新了我的问题。请再查一下。谢谢大家:D