gpt4 book ai didi

mysql - 如何选择一列中与其他列的单个值匹配的值组合的计数?

转载 作者:行者123 更新时间:2023-11-29 19:23:05 26 4
gpt4 key购买 nike

我有以下数据:

表是:order_details(order_id int not null,prod_id int not null)

Order_id Prod_id
1              1
1              2
2              3
3              4
4              1
4              2
4              7

我需要查找在订单中一起销售的两种或多种产品的组合。
对于此数据,这将是产品 1 和 2,因为这些数据在单个订单中出现两次。我需要大多数订单一起出现的产品以及它们一起出现的订单数。

我正在使用此查询:

select distinct od1.prod_id,od2.prod_id from order_details od1 join order_details od2 on od1.order_id=od2.order_id  where od1.prod_id!= od2.prod_id limit 10;

这仅适用于 2 种产品的组合,并且不提供计数。

这可以做得更好吗?

谢谢!

最佳答案

ariaDB [sandbox]> drop table if exists t;
Query OK, 0 rows affected (0.10 sec)

MariaDB [sandbox]> create table t (Order_id int,Prod_id int);
Query OK, 0 rows affected (0.19 sec)

MariaDB [sandbox]> insert into t values
-> (1 , 1),
-> (1 , 2),
-> (2 , 3),
-> (3 , 4),
-> (4 , 1),
-> (4 , 2),
-> (4 , 7),
-> (5 , 1),
-> (5 , 2),
-> (6 , 1),
-> (6 , 2),
-> (6 , 7),
-> (7 , 1),
-> (7 , 2),
-> (7 , 7),
-> (8 , 7),
-> (8 , 2)
-> ;
Query OK, 17 rows affected (0.07 sec)
Records: 17 Duplicates: 0 Warnings: 0

MariaDB [sandbox]>
MariaDB [sandbox]> select s.prodmix,count(*) Obs
-> from
-> (
-> select order_id,
-> group_concat(prod_id order by prod_id asc) prodmix, count(*) as obs
-> from t
-> group by order_id
-> having count(*) > 1
-> ) s
-> group by prodmix
-> order by obs desc limit 2;
+---------+-----+
| prodmix | Obs |
+---------+-----+
| 1,2,7 | 3 |
| 1,2 | 2 |
+---------+-----+
2 rows in set (0.04 sec)

关于mysql - 如何选择一列中与其他列的单个值匹配的值组合的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42324150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com