问题描述
{
"brands": [
{
"value": "brand1"
},{
"value": "brand1"
},{
"value": "brand2"
}
],"count": 3,"name": "Windows"
}
我有一个像这样的文档,如何将具有相似值的数组内容分组并获取其计数?像下面这样。有人可以帮我吗?
{
"brands": [
{
"value": "brand1","count": 2
},{
"value": "brand2","count":1
}
],"name": "Windows"
}
解决方法
使用子查询表达式根据您的需要重建阵列。后记对数组值执行ARRAY_SUM()以获得超出总数的计数。
SELECT d.*,brands,ARRAY_SUM(brands[*].`count`) AS count
FROM default AS d
LET brands = (SELECT b.`value`,COUNT(1) AS count
FROM d.brands AS b
GROUP BY b.`value`)
WHERE ....
如果外部计数已经正确
SELECT d.*,(SELECT b.`value`,COUNT(1) AS count
FROM d.brands AS b
GROUP BY b.`value`) AS brands
FROM default AS d
WHERE ....