如何将几行汇总为一?

时间:2018-10-29 10:42:41

标签: sql

我想让所有将n种语言说成一个元组的国家/地区。

如果我运行此查询:

            SELECT
               co.name
            FROM
                country co JOIN countrylanguage cl ON co.code = cl.countrycode
            GROUP BY
                co.name                                                        
            HAVING
                count(cl.language) = 6;

每个国家/地区在同一列中都得到一个结果。

如果我运行相同命令,只需使用聚合命令:

            SELECT
               array_agg(co.name)
            FROM
                country co JOIN countrylanguage cl ON co.code = cl.countrycode                                                    
            HAVING
                count(cl.language) = 6;

我得到一个空结果,1列,0行。

在上一个查询中包含一个“ GROUP BY”,我将所有国家/地区放在单独的行中,但每个国家/地区都重复6次。

我想获取第一个查询的结果,但作为一个元组。我该怎么做?

2 个答案:

答案 0 :(得分:0)

在mysql中,它将是group_concat

SELECT
               group_concat(co.name)
            FROM
                country co JOIN countrylanguage cl ON co.code = cl.countrycode                                                    
            HAVING
                count(cl.language) = 6;

答案 1 :(得分:0)

如果您想要一个包含6种语言的所有国家/地区的数组,请使用子查询:

SELECT array_agg(cc.name)
FROM (SELECT co.name
      FROM country co JOIN
           countrylanguage cl
           ON co.code = cl.countrycode
      GROUP BY co.name                                                        
      HAVING count(cl.language) = 6
     ) cc;

如果要在MySQL中使用此功能,则可以使用group_concat()将结果聚合为一个字符串:

SELECT group_concat(cc.name)
FROM (SELECT co.name
      FROM country co JOIN
           countrylanguage cl
           ON co.code = cl.countrycode
      GROUP BY co.name                                                        
      HAVING count(cl.language) = 6
     ) cc;