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

How to get rows having specified value in sql?

我有一个这样的 table -

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

我想计算那些具有 cat_id = 1 的行数(对于 Ex- 在大写情况下它计数为 2)。我该怎么做?

您可以使用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'

获取 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

您可以将逗号分隔列表转换为数组,然后使用 ANY 运算符搜索所需的 cat_id 值:

select count(*)
from foo
where 1 = any (string_to_array(cat_id, ',')::int[])

但是你真的应该考虑修复你的数据模型。存储逗号分隔列表几乎总是一个糟糕的选择。 如果你必须反规范化,在 Postgres 中使用数组是更好的选择。