如何获取 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 中使用数组是更好的选择。
我有一个这样的 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 中使用数组是更好的选择。