我有一个SQL查询(简化示例):
select
ifnull(count(table.id), 0) as count
from
table
where
table.id > 10000
如果找不到表中的任何内容,结果显示一个空表,但我想输出0.
我的决定(速度降低了5倍!!!)
DROP TEMPORARY TABLE IF EXISTS xxx;
CREATE TEMPORARY TABLE xxx ENGINE = MEMORY AS (SELECT SQL_CALC_FOUND_ROWS ...);
IF (FOUND_ROWS() = 0) THEN
SELECT 0 AS count;
ELSE
SELECT * FROM xxx;
END IF;
对不起,速度是恒定的:)我的错误
结果: 通过使用SQL_CALC_FOUND_ROWS和FOUND_ROWS解决了这个问题(感谢@Unknown用户) 但临时表......不确定这样一个决定的最优性
答案 0 :(得分:0)
您可以使用此查询。这将为您提供匹配查询的总记录数。如果没有匹配结果,则会显示0
。
SELECT SQL_CALC_FOUND_ROWS ColumnName FROM TableName WHERE ColumnName IN ('');
SELECT FOUND_ROWS();
答案 1 :(得分:0)
这样:
select
COALESCE(count(table.id), 0) as count
from
table
where
table.id > 10000
group by table.id
答案 2 :(得分:0)
你可以使用case来检查表中没有值
SELECT case when table.id is null then 0
else count(table.id) end as Count_NUM_ID FROM table
where
table.id > 10000
答案 3 :(得分:0)
只需删除group by
即可。此外,ifnull()
是不必要的:
select count(t.id) as `count`
from table t
where t.id > 10000;
您似乎想要满足条件的ID计数。您的版本将为每个id
返回单独的计数。
如果您想为每个id
单独计算,您可以执行以下操作:
select id, count(t.id) as `count`
from table t
where t.id > 10000
group by id
union all
select null, 0
from table t
where not exists (select 1 from table t2 where t2.id > 10000);