代码之家  ›  专栏  ›  技术社区  ›  Mahks

如何在组concat()中使用sum()?

  •  7
  • Mahks  · 技术社区  · 15 年前

    修订的问题

    真的想要一组钱…

    表:商店

    +---------+--------+--------+
    | shop_id | name   | state  |
    +---------+--------+--------+
    |    0    | shop 0 |    5   |
    |    1    | shop 1 |    5   |
    |    2    | shop 2 |    5   |
    |    3    | shop 3 |    2   |
    +---------+--------+--------+
    

    表:项目

    +------------+--------------+
    |   shop  | item | quantity | 
    +------------+--------------+
    |    0    |  0   |    1     |
    |    0    |  1   |    2     |
    |    0    |  2   |    3     |
    |    1    |  0   |    1     |
    |    1    |  1   |    2     |
    |    1    |  2   |    3     |
    |    2    |  0   |    1     |
    |    2    |  1   |    2     |
    |    2    |  2   |    3     |
    |    3    |  0   |    1     |
    |    3    |  1   |    2     |
    |    3    |  2   |    3     |
    +------------+--------------+
    
        SELECT state,SUM(i.quantity) total
        FROM shops s2
        LEFT JOIN items i ON i.shop=s2.shopid
        WHERE state=5
        GROUP by item
    
    result #1:
    
    +--------+---------+
    | state  |  total  |
    +--------+---------+
    |    5   |    3    |
    +--------+---------+
    |    5   |    6    |
    +--------+---------+
    |    5   |    9    |
    +--------+---------+
    
    But I would like the totals, like this:
    result #2:
    +--------+---------+---------+----------+
    | state  | total 0 | total 1 |  total 2 |
    +--------+---------+---------+----------+
    |    5   |    3    |     6   |    9     |
    +--------+---------+---------+----------+
    
    or using group_concat()
    result #3
    
    +--------+---------+
    | state  | totals  |
    +--------+---------+
    |    5   |  3,6,9  |
    +--------+---------+
    

    我似乎无法让组concat获取结果1中的总列

    提前谢谢

    3 回复  |  直到 13 年前
        1
  •  5
  •   Thiago Belem    15 年前

    变化:

    group_concat(CAST(quantity AS CHAR))
    

    SUM(quantity)
    

    ——

    SELECT s.`state`, i.`item`, SUM(i.`quantity`) AS quantities
    FROM `shops` AS s
        LEFT JOIN `items` AS i ON i.`shop` = s.`shopid`
    WHERE s.`state` = 5
    GROUP BY i.`item`
    
        2
  •  4
  •   Mahks    13 年前

    找到了一种方法:

    SELECT state,GROUP_CONCAT(cast(total as char))
    FROM
    (
        SELECT state,SUM(i.quantity) total
        FROM shops s
        LEFT JOIN items i ON i.shop=s.shopid
        WHERE state=5
        GROUP by item
    ) s
    
        3
  •  0
  •   user269464    15 年前

    据我所知,在mysql中不能这样做。动态列仅在group_contcat()范围内受支持,该范围仍将多个结果行聚合为一列。

    只有当你有固定/有限数量的 Total X -s,您可以在查询中明确地声明它们。