在SQL中将值组合在一起

时间:2017-12-04 00:32:32

标签: sql sqlite

我有一个postgresql数据库,其数据有四列。我使用sqllite3在python中运行这些命令。假设列名为A,B,c,d。 数据库中的每个事件都由A和B的组合值唯一表示。例如,请考虑下表。

--------------------------------------------------
|  A| B|   c|   d|
--------------------------------------------------
| 10| 3|  c1|  d1|
--------------------------------------------------
| 11| 4|  c2|  d2|
--------------------------------------------------
| 10| 3|  c3|  d3|
--------------------------------------------------
| 12| 3|  c4|  d4|
--------------------------------------------------
| 13| 1|  c5|  d5|
--------------------------------------------------
| 10| 3|  c6|  d6|
--------------------------------------------------
| 11| 4|  c7|  d7|
--------------------------------------------------
| 10| 1|  c8|  d8|
--------------------------------------------------
| 10| 2|  c9|  d9|
--------------------------------------------------
| 11| 3| c10| d10|
--------------------------------------------------

如您所见,组合10和3在表中出现三次,这意味着所有这些行都是同一事件的一部分(其中每个事件由A和B中的组合值唯一表示)。我想要的是所有细节的列表:

  1. 根据A列分组
  2. 然后根据它在B列中的相应值进行分组。
  3. 例如,在这种情况下,(c1, c3, c6), (d1, d2, d6), (c8), (d8), (c9), (d9) - 这些对应于A列中的10。前两个'组'来自10(来自A)和相应的3(来自B)。第二个来自10(A)和1(B),后两个来自10(A)和2(B)。同样,其他一切也必须以这种方式分组。

    我是SQL的完全菜鸟,所以我真的迷路了。经过大量的谷歌搜索后,我得到了这个部分

    SELECT GROUP_CONCAT(c, ',') c,\
           GROUP_CONCAT(d, ',') d,\
    FROM table WHERE GROUP BY A, B
    

    这给了我详细信息,但它将A和B组合在一起,因此我得到的输出在另一行中有10/3和10/2。我想要将所有10个(以及A中的所有其他值)组合在一起,然后然后按照它在B中的值进行分组。

    如何做到这一点?谢谢!

    编辑:表格格式所需的答案 -

    --------------------------------------------------
    |  (c1, c3, c6), (d1, d3, d6), (c8), (d8), (c9), (d9)
    --------------------------------------------------
    | (c2, c7), (d2, d7), (c10), (d10)
    --------------------------------------------------
    | (c4), (d4)
    --------------------------------------------------
    | (c5), (d5)
    --------------------------------------------------
    

0 个答案:

没有答案