我有一张这样的表 -
id cat_id
1 1,2
2 1,3
3 5,3,11
我想要计算那些有cat_id = 1
的行(对于ex-in uppar,它的数量是2)。我该怎么办?
答案 0 :(得分:1)
您可以使用LIKE
,例如:
SELECT COUNT(*)
FROM tbl
WHERE cat_id LIKE '1,%'
如果字符串是从不同的东西开始???像@POHH提出的5 :
SELECT COUNT(*)
FROM tbl
WHERE cat_id LIKE '%,1,%'
OR cat_id LIKE '1,%'
OR cat_id LIKE '%,1'
答案 1 :(得分:0)
计算cat_id = 1
select count(*)
from (
select unnest(string_to_array(cat_id, ','))::int rowz
from foo ) t
where rowz = 1
获取所有cat_id
及总计数
select rowz cat_id,count(*) total_count from (
select unnest(string_to_array(cat_id, ','))::int rowz
from foo ) t
group by rowz
order by cat_id
答案 2 :(得分:0)
您可以将逗号分隔列表转换为数组,然后使用ANY
运算符搜索所需的cat_id
值:
select count(*)
from foo
where 1 = any (string_to_array(cat_id, ',')::int[])
但您应该考虑修复数据模型。将逗号分隔列表存储几乎总是一个糟糕的选择。 如果你必须去标准化,使用数组是Postgres中更好的选择。