相关疑难解决方法(0)

优化 max() 聚合,该聚合也适用于“无行”

我有一个正在尝试针对 PostgreSQL 9.2 进行优化的查询:

select coalesce(max(id),0) as m from tbl
Run Code Online (Sandbox Code Playgroud)

它需要永远运行,所以我想我可以将其重写为

select id from tbl order by id desc limit 1
Run Code Online (Sandbox Code Playgroud)

0但如果表中没有行则需要返回。我尝试了几种 case 语句的组合,但它们似乎不起作用。有什么建议么?

计划空表:

Aggregate (cost=11.25..11.26 rows=1 width=4)
 -> Seq Scan on tbl (cost=0.00..11.00 rows=100 width=4)
Run Code Online (Sandbox Code Playgroud)

具有 1,190,000 行的表的成本为 58k,但执行计划相同。

postgresql coalesce aggregate-functions postgresql-9.2 postgresql-performance

5
推荐指数
2
解决办法
1714
查看次数

如果没有找到值,如何从函数返回值

0.0如果以下函数没有返回任何内容,我试图返回:

CREATE OR REPLACE FUNCTION get_height(firstn VARCHAR, lastn VARCHAR)
  RETURNS FLOAT AS
$$
DECLARE
    height FLOAT = 0.0;
BEGIN
    SELECT into height AVG(((p.h_feet * 12) + p.h_inches) * 2.54)
    FROM player p
    WHERE p.firstname = firstn AND p.lastname = lastn; 

    RETURN height;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我试过搜索它,发现它COALESCE不起作用.有没有人有任何想法如何解决这个问题?

表结构:

 create table player(
                     firstname text
                    ,lastname text
                    ,h_feet INT
                    ,h_inches INT
                    );
Run Code Online (Sandbox Code Playgroud)

示例数据:

  insert into player values ('Jimmy','Howard',6,2);
Run Code Online (Sandbox Code Playgroud)

sql postgresql null function plpgsql

3
推荐指数
1
解决办法
3084
查看次数

如何编写在组中找不到记录时返回计数 = 0 的 SQL 查询

我有一个客户端表,我需要按以下顺序从中选择数据:

Gender      Count
-----------------
Female      10
Male        50
Unknown     2
Run Code Online (Sandbox Code Playgroud)

(上表数据仅作为示例)

为此,我使用了以下 SQL:

SELECT decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown') "Gender"
, count(ID) "Count"
FROM client c
WHERE c.created <= '01-JAN-2000'
GROUP BY decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown')
ORDER BY decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown')
;
Run Code Online (Sandbox Code Playgroud)

但是,问题是在 2000 年 1 月 1 日之前没有创建客户端!因此,表格显示为空白:

Gender     Count
----------------
Run Code Online (Sandbox Code Playgroud)

但是,我想在这种情况下显示如下:

Gender     Count
----------------
Female     0
Male       0
Unknown    0
Run Code Online (Sandbox Code Playgroud)

请告诉我该怎么做?

sql oracle

3
推荐指数
1
解决办法
4444
查看次数