MySQL调用:使用产品子集完成订单

MySQL调用:使用产品子集完成订单,mysql,Mysql,我们的问题如下。我们有一个商店订单数据库,包含客户下的订单: Id | User_id ------------- 1 | 1 另一方面,我们有表shop\u order\u products,其中包含包含每个订单的产品,其中字段order\u id与两个表相关: ID | Order_id | Qty | Product_id | Product_name | Product_price | -------------------------------------------

我们的问题如下。我们有一个商店订单数据库,包含客户下的订单:

Id | User_id
-------------
1  |       1
另一方面,我们有表shop\u order\u products,其中包含包含每个订单的产品,其中字段order\u id与两个表相关:

ID | Order_id | Qty | Product_id | Product_name | Product_price |
-----------------------------------------------------------------
1  |        1 |   2 |         23 |   Samsung S5 |          40.5 |
2  |        1 |   1 |         12 |    IPhone 6S |            80 |
为了澄清,在本例中,order 1有2台三星和1台iPhone

通过以下电话,我们可以通过table shop_order_products了解我们在线商店最畅销的产品:

SELECT *, COUNT (*) sales FROM shop_order_products GROUP BY order_id ORDER BY sales DESC

给定一部分产品,我们需要知道我们能得到多少完整的订单。也就是说,如果我们销售最多的产品是iPhone 6S和三星Galaxy S5,那么这两款产品的完整订单会有多少。如果订单既包含产品,也包含其他产品,我们的计算将不考虑这些产品。

如果我理解正确,您希望订单只包含一组给定的产品,而不包含其他产品。而且,你似乎没有考虑数量

因此:

选择sop.order\u id
来自车间\订单\产品sop
按sop.order\U id分组
具有总和(sop.product_id in())=计数(*);

sum()。
=count(*)
指定这是所有行。

如果我理解正确,您想要的订单只有一组给定的产品,没有其他产品。而且,你似乎没有考虑数量

因此:

选择sop.order\u id
来自车间\订单\产品sop
按sop.order\U id分组
具有总和(sop.product_id in())=计数(*);

sum()。
=count(*)
指定这是所有行。

显示的查询不正确。您选择的不是最畅销的产品,而是商店订单产品中条目数最多的订单。对于每个订单,您都会显示任意选择的一条记录,也就是说,结果中显示哪些产品是偶然的。下面是一个按销售获取产品订单的查询:
select product\u id,product\u name,sum(数量)as sales from shop\u order\u products group by product\u id order by sum(数量)desc
。您显示的查询不正确。您选择的不是最畅销的产品,而是商店订单产品中条目数最多的订单。对于每个订单,您都会显示其任意选择的一条记录,即结果中显示的产品是偶然的。下面是一个查询,用于按销售获取产品订单:
选择产品id、产品名称、金额(数量)作为来自商店的销售额\u订单\u产品组按产品\u id按金额(数量)订购说明
select sop.order_id
from shop_order_products sop
group by sop.order_id
having sum(sop.product_id in (<your list here>)) = count(*);