in

Select Wat from SQL, Hacker News

Working on a postgres-compatible query compiler has taught me many things.

Things I was better off not knowing.

Let’s begin:

  jamie=# create table nums (a int primary key, b text); CREATE TABLE  jamie=# insert into nums (a, b) values ​​(0, 'foo'), (1, 'foo'), (2, 'foo'), (3, 'bar'); INSERT 0 4 
 
     jamie=# select a   1 from nums group by a   1;  ? column? ----------         2         4         1         3 (4 rows)  jamie=# select a   1 from nums group by 1   a; ERROR: column "nums.a" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: select a   1 from nums group by 1   a;                ^ 
 
 

jamie=# select a, b from nums order by 2; a | b --- -----  3 | bar  0 | foo  1 | foo  2 | foo (4 rows) jamie=# select a, b from nums order by 1 1;  a | b --- -----  0 | foo  1 | foo  2 | foo  3 | bar (4 rows)

 
 

jamie=# (select a from nums) order by b;  a ---  3  0  1  2 (4 rows) jamie=# ((select a from nums) union (select a from nums)) order by b; ERROR: column "b" does not exist LINE 1: ... (select a from nums) union (select a from nums)) order by b;

 
 

jamie=# select a 1 from nums group by "? column?";  ? column? ----------         3         4         2         1 (4 rows)

 
 

 jamie=# select b from nums group by a;  b --- (0 rows)  jamie=# select a from nums group by b; ERROR: column "nums.a" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: select a from nums group by b; 
 
     jamie=# create table "" "(x int); CREATE TABLE jamie=#  d        List of relations  Schema | Name | Type | Owner --------   ------   -------   -------  public | "| table | jamie  public | nums | table | jamie (2 rows) 
 
 

jamie=# select null=null;  ? column? ---------- (1 row) jamie=# select array [null]=array [null];  ? column? ----------  t (1 row)

 
     jamie=# select '{foo, bar, null}' :: text [];       text ----------------  {foo, bar, NULL} (1 row) 
 
 

jamie=# select '{"ABC n"}' :: text []=ARRAY ['ABCn'];  ? column? ----------  t (1 row)

 
     jamie=# select array_dims (array ['a', 'a'] :: text []);  array_dims ------------  [1:2] (1 row)  jamie=# select array_dims (array ['a'] :: text []);  array_dims ------------  [1:1] (1 row)  jamie=# select array_dims (array [] :: text []);  array_dims ------------  (1 row) 
 
     jamie=# create table users ("user" text, "password" text); CREATE TABLE jamie=# insert into users values ​​('bob', 'whatever'); INSERT 0 1 jamie=# select user, password from users;  user | password -------   ----------  jamie | whatever (1 row) 
 
     jamie=# select 1, generate_series (1,2), generate_series (1,3);  ? column? | generate_series | generate_series ----------   -----------------   -----------------         1 | 1 | 1         1 | 2 | 2         1 | | 3 (3 rows) 
 
 

jamie=# select generate_series (generate_series (1,2), generate_series (3,

);  generate_series -----------------                1                2                3                2                3                4 (6 rows)

 
     jamie=# select jsonb_array_elements (jsonb_array_elements ('[[1,2], [3,4] ] ')), jsonb_array_elements (' [7,8,9] ');  jsonb_array_elements | jsonb_array_elements ----------------------   ----------------------  1 | 7  2 | 7  3 | 8  4 | 8 (4 rows) 
 
     jamie=# select ('[["foo"])' :: jsonb) ->> 0;  ? column? ----------  ["foo"] (1 row)  jamie=# select ('["foo"]' :: jsonb) ->> 0;  ? column? ----------  foo (1 row)  jamie=# select ('"foo"' :: jsonb) ->> 0;  ? column? ----------  foo (1 row) 
 
     jamie=# select ('1' :: jsonb) :: int;  int4 ------     1 (1 row)  jamie=# select ('true' :: jsonb) :: bool;  bool ------  t (1 row)  jamie=# select ('"foo"' :: jsonb) :: text;  text -------  "foo" (1 row)  jamie=# select ('1' :: jsonb) ->> 0;  ? column? ----------  1 (1 row)  jamie=# select ('true' :: jsonb) ->> 0;  ? column? ----------  true (1 row)  jamie=# select ('"foo"' :: jsonb) ->> 0;  ? column? ----------  foo (1 row) 
 
 

Thanks to Nikhil Benesch, Justin Jaffray and several decades of "wouldn't it be nice if ..." for contributions.

There will likely be a sequel.

Read More Full coverage and live updates on the Coronavirus (Covid- 100

What do you think?

Leave a Reply

Your email address will not be published.

GIPHY App Key not set. Please check settings

Is Bill Gates Really the Great Guy You Think He Is ?, Crypto Coins News

Ask HN: What scientific phenomenon do you wish someone would explain better ?, Hacker News