我有一个包含2列的表格 - id
和pets
。
宠物栏包含由[逗号]分隔的缩写宠物名称,如下所示
+----+-------------+
| id | pets |
+----+-------------+
| 1 | CAT,DOG |
+----+-------------+
| 2 | CAT,DOG,TIG |
+----+-------------+
| 3 | ZEB,MOU |
+----+-------------+
现在我要列出宠物= CAT的所有id,同样所有id都是宠物= DOG等等
我最初的尝试是为每个PET(CAT,DOG等)运行以下SQL
select id
from "favpets"
where pets like '%CAT%'
这个简单解决方案的局限性在于实际表格没有。宠物并不像上面提到的那么简单。
没有。这样的宠物超过200.因此,必须执行200个sql才能列出对应宠物的所有id
有没有好的替代解决方案?我正在使用学说,所以学说提供了什么好的实现?
答案 0 :(得分:1)
通过此查询,您将获得所有id,所有宠物,按宠物订购:
SELECT id, unnest(string_to_array(pets, ',')) AS mypet
FROM favpets
ORDER BY mypet;
使用它作为子查询,它将变得容易分组和计数:
SELECT mypet, COUNT(*) FROM
(
SELECT id, unnest(string_to_array(pets, ',')) AS mypet
FROM favpets
ORDER BY mypet
) AS a
GROUP BY mypet;