如何在sql中获取具有特定值的行?

时间:2015-01-23 06:34:08

标签: sql database postgresql

我有一张这样的表 -

id       cat_id
1        1,2
2        1,3
3        5,3,11

我想要计算那些有cat_id = 1的行(对于ex-in uppar,它的数量是2)。我该怎么办?

3 个答案:

答案 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中更好的选择。