SQL - 'partial'group by,不同列的不同行为

时间:2013-09-29 08:55:29

标签: mysql sql group-by

我查询我的数据库以从不同的表中提取一些信息。我已经设法得到一个可以接受的结果,我可以在SQL之外使用它。我得到的结果非常低效,我想知道是否有办法让SQL做一些工作。基本上,我需要更有效地对数据进行分组并丢弃其中的一些数据。

我当前的查询结果表格可以简化如下:

product_id | person_id | person_type | person_address | other_column
         1 |      1001 |           1 |    999 Main St | info about product 1
         1 |      1245 |           0 |                | info about product 1
         1 |      5133 |           2 |     101 Sql St | info about product 1
         1 |      9191 |           0 |    1 Query Ave | info about product 1
         2 |      5451 |           1 |    40 Table Rd | info about product 2
         2 |      6610 |           0 |                | info about product 2

我想GROUP BY product_id,但如果person_id保持单独的person_addressperson_type=0。然后连接共享相同person_id的所有product_id的地址。只保留other_column中的一个值。 如果应用于上表,它应如下所示:

product_id | person_id | person_address |                        other_address | other_column
         1 |      1245 |                | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
         1 |      9191 |    1 Query Ave |              999 Main St; 101 Sql St | info about product 1
         2 |      6610 |                |                          40 Table Rd | info about product 2

-

或者,第二个最佳解决方案如下: GROUP BY product_id,保留person_id person_type=0 product_id,如果多个人共享person_address,请联系他们,连接other_column,并保留product_id | person_id | person_address | other_column 1 | 1245; 9191 | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1 2 | 6610 | 40 Table Rd | info about product 2 other_column }}。结果应该如下表所示:

person_id

-

为了给出一些背景知识,我有两个目标:第一个是提取person_address但是丢弃不必要的重复项。文本信息非常繁重。 第二个目标是能够为那些没有{{1}}的{​​{1}}获取部分位置信息。

(我试着寻找类似的问题,没有找到任何东西。)

1 个答案:

答案 0 :(得分:0)

select
    t1.product_id, t1.person_id,
    t1.person_address,
    group_concat(t2.person_address) as other_address
from Table1 as t1
    left outer join Table1 as t2 on
        t2.product_id = t1.product_id and t2.person_id <> t1.person_id
where t1.person_type = 0
group by t1.product_id, t1.person_id

<强> sql fiddle demo