相关疑难解决方法(0)

PostgreSQL函数中语言sql和语言plpgsql的区别

我是数据库开发的新手,所以我对以下示例有些怀疑:

函数f1() - 语言sql

 create or replace function f1(istr  varchar) returns text as $$ 
 select 'hello! '::varchar || istr;
 $$ language sql;
Run Code Online (Sandbox Code Playgroud)

函数f2() - 语言plpgsql

 create  or replace function f2(istr  varchar)
 returns text as $$ 
 begin select 'hello! '::varchar || istr; end;
 $$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
  • 这两个函数都可以像select f1('world')或一样调用select f2('world').

  • 如果我打电话select f1('world')输出将是:

    `hello! world`
    
    Run Code Online (Sandbox Code Playgroud)
  • 输出select f2('world'):

    错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改用PERFORM.语境:在SQL语句中PL/pgSQL函数f11(字符变化)第2行 ******错误******

  • 我想知道的差异,在哪些情况下我应该使用language sqllanguage plpgsql …

sql postgresql stored-procedures function plpgsql

37
推荐指数
2
解决办法
3万
查看次数

MySQL在group by之后获得第一个非null值

我有一个大表,数据不是唯一但需要.此表是多个联合选择的结果,因此不是实际表.由于其他原因,我不能把它变成一张真正的桌子.

所有UNION表都有一个电子邮件列,最终将是唯一的.结果记录如下所示:

1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com  Steve
4   tiny@test.com   
13  tony@gmail.com  Tony
14  test@test.com   Ozzy
15  test@yahoo.com  Dave
16  tiny@test.com   Tim
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有些电子邮件会以不同的名称或不存在的名称出现.当我GROUP BY email在最后添加一个子句时,结果如下所示:

1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com  Steve
4   tiny@test.com   
13  tony@gmail.com  Tony
Run Code Online (Sandbox Code Playgroud)

如您所见,电子邮件4没有名称,因为它选择了名称的第一个条目NULL.然后我尝试使用GROUP_CONCAT哪个使结果看起来像这样:

1   ozzy@test.com   Ozzy
14  test@test.com   Ozzy,Tony
15  test@yahoo.com  Dave,Steve
16  tiny@test.com   Tim
13  tony@gmail.com  Tony
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,现在每个人都有一个名称,但有些行有多个名称已连接.我想要做的是GROUP BY emailNOT NULL每行的每一列中选择第一个条目,理论上如下:

1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com …
Run Code Online (Sandbox Code Playgroud)

mysql group-by group-concat

31
推荐指数
1
解决办法
1万
查看次数