我想让所有将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次。
我想获取第一个查询的结果,但作为一个元组。我该怎么做?
答案 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;