使用MySql查询显示所有组合

时间:2014-02-07 14:57:00

标签: mysql sql

我有下表:

Customer, Product, Qty
 A         Red        2
 A         Green      1
 B         Red        1
 B         Green      1
 B         Yellow     5
 C         Green      1 
 D         Green      1

我需要显示所有组合,以获得如下报告:

Red and Green
   A     3
   B     2
Red and Yellow
   B     6
Green and Yellow
   B     6
Only red 
   ...
Only green
   ...
Only yellow

在您看来,是否可以在Sql(MySql)中执行? 我不知道从哪里开始..我知道只有它被称为“排列”问题。

由于

2 个答案:

答案 0 :(得分:2)

我认为你可以通过自我加入和聚合来做到这一点:

select t1.product, t2.product, t1.customer,
       (case when t1.product = t2.product then sum(t1.qty) else sum(t1.qty + t2.qty) end)
from table t1 join
     table t2
     on t1.customer = t2.customer and
        t1.product <= t2.product
group by  t1.product, t2.product, t1.customer;

产品相同时的值对应一种产品。

这假设客户和产品表中没有重复项。如果是这样,那么您需要使用子查询预先聚合表。

Here是一个演示它的SQL小提琴。

请注意,输出是具有列和行的典型SQL结果表。它不是问题中的格式,这不是典型SQL查询的结果。

答案 1 :(得分:0)

尝试以下SQL:

select if(t1.Product = t2.Product, concat('Only ', t1.Product), concat(t1.Product, ' and ', t2.Product)) as Combo, t1.Customer, sum(t1.Qty + t2.Qty) as Qty
from [table] t1
    inner join [table] t2 on t1.Customer = t2.Customer
where t1.Product <= t2.Product -- to eliminate duplicates
group by t1.Customer, t1.Product, t2.Product;