| # Copyright 2011-2015 Quickstep Technologies LLC. |
| # Copyright 2015-2016 Pivotal Software, Inc. |
| # Copyright 2016, Quickstep Research Group, Computer Sciences Department, |
| # University of Wisconsin—Madison. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| SELECT * |
| FROM test |
| WHERE int_col < 5 |
| ORDER BY int_col DESC, |
| long_col ASC |
| LIMIT 5; |
| -- |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| |int_col |long_col |float_col |double_col |char_col | |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| | 4| 16| 2| 8| 4 2.000000| |
| | 2| 4| 1.41421354| 2.8284271247461903| 2 1.414214| |
| | -1| 1| 1| -1| -1 1.000000| |
| | -3| 9| 1.73205078| -5.196152422706632| -3 1.732051| |
| | -5| 25| 2.23606801| -11.180339887498949| -5 2.236068| |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| == |
| |
| # Simple SELECT. |
| SELECT * |
| FROM test |
| WHERE int_col < 10 |
| AND long_col < 100 |
| AND double_col < 0; |
| -- |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| |int_col |long_col |float_col |double_col |char_col | |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| | -1| 1| 1| -1| -1 1.000000| |
| | -3| 9| 1.73205078| -5.196152422706632| -3 1.732051| |
| | -5| 25| 2.23606801| -11.180339887498949| -5 2.236068| |
| | -7| 49| 2.64575124| -18.520259177452136| -7 2.645751| |
| | -9| 81| 3| -27| -9 3.000000| |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| == |
| |
| # Modulo operator |
| SELECT int_col % 2, |
| long_col % (int_col * int_col), |
| float_col % 1, |
| double_col % 1.0 |
| FROM test; |
| -- |
| +-----------+----------------------------+---------------+------------------------+ |
| |(int_col%2)|(long_col%(int_col*int_col))|(float_col%1) |(double_col%1.0) | |
| +-----------+----------------------------+---------------+------------------------+ |
| | NULL| NULL| 0| NULL| |
| | -1| 0| 0| 0| |
| | 0| 0| 0.414213538| 0.82842712474619029| |
| | -1| 0| 0.732050776| -0.19615242270663202| |
| | 0| 0| 0| 0| |
| | -1| 0| 0.23606801| -0.18033988749894903| |
| | 0| 0| 0.449489832| 0.69693845669906729| |
| | -1| 0| 0.645751238| -0.5202591774521359| |
| | 0| 0| 0.828427076| 0.62741699796952233| |
| | -1| 0| 0| 0| |
| | NULL| NULL| 0.162277699| NULL| |
| | -1| 0| 0.31662488| -0.48287269390939969| |
| | 0| 0| 0.464101553| 0.56921938165305619| |
| | -1| 0| 0.605551243| -0.87216658103185551| |
| | 0| 0| 0.741657495| 0.3832034148351795| |
| | -1| 0| 0.872983456| -0.094750193111252656| |
| | 0| 0| 0| 0| |
| | -1| 0| 0.123105526| -0.092795635500223739| |
| | 0| 0| 0.242640495| 0.36753236814712409| |
| | -1| 0| 0.358899117| -0.81907992727280998| |
| | NULL| NULL| 0.472136021| NULL| |
| | -1| 0| 0.582575798| -0.23408959407264263| |
| | 0| 0| 0.690415859| 0.18914671611545941| |
| | -1| 0| 0.79583168| -0.30412503619254494| |
| | 0| 0| 0.898979664| 0.5755076535925383| |
| +-----------+----------------------------+---------------+------------------------+ |
| == |
| |
| SELECT i, |
| i/4 AS bit2, |
| (i%4)/2 AS bit1, |
| i%2 AS bit0 |
| FROM generate_series(0, 7) AS gs(i); |
| |
| -- |
| +-----------+-----------+-----------+-----------+ |
| |i |bit2 |bit1 |bit0 | |
| +-----------+-----------+-----------+-----------+ |
| | 0| 0| 0| 0| |
| | 1| 0| 0| 1| |
| | 2| 0| 1| 0| |
| | 3| 0| 1| 1| |
| | 4| 1| 0| 0| |
| | 5| 1| 0| 1| |
| | 6| 1| 1| 0| |
| | 7| 1| 1| 1| |
| +-----------+-----------+-----------+-----------+ |
| == |
| |
| SELECT * |
| FROM test |
| WHERE int_col < 10 |
| AND long_col < 100; |
| -- |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| |int_col |long_col |float_col |double_col |char_col | |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| | -1| 1| 1| -1| -1 1.000000| |
| | 2| 4| 1.41421354| 2.8284271247461903| 2 1.414214| |
| | -3| 9| 1.73205078| -5.196152422706632| -3 1.732051| |
| | 4| 16| 2| 8| 4 2.000000| |
| | -5| 25| 2.23606801| -11.180339887498949| -5 2.236068| |
| | 6| 36| 2.44948983| 14.696938456699067| 6 2.449490| |
| | -7| 49| 2.64575124| -18.520259177452136| -7 2.645751| |
| | 8| 64| 2.82842708| 22.627416997969522| 8 2.828427| |
| | -9| 81| 3| -27| -9 3.000000| |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| == |
| |
| SELECT int_col, |
| int_col+100 AS alias_col, |
| char_col AS char_col |
| FROM test |
| WHERE int_col < 10 |
| AND long_col < 100; |
| -- |
| +-----------+-----------+--------------------+ |
| |int_col |alias_col |char_col | |
| +-----------+-----------+--------------------+ |
| | -1| 99| -1 1.000000| |
| | 2| 102| 2 1.414214| |
| | -3| 97| -3 1.732051| |
| | 4| 104| 4 2.000000| |
| | -5| 95| -5 2.236068| |
| | 6| 106| 6 2.449490| |
| | -7| 93| -7 2.645751| |
| | 8| 108| 8 2.828427| |
| | -9| 91| -9 3.000000| |
| +-----------+-----------+--------------------+ |
| == |
| |
| # Nested queries. |
| SELECT * |
| FROM |
| (SELECT * |
| FROM |
| (SELECT * |
| FROM |
| (SELECT * |
| FROM test |
| WHERE long_col < 100) a |
| WHERE double_col<0) a |
| WHERE long_col < 200) a |
| WHERE int_col < 10; |
| -- |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| |int_col |long_col |float_col |double_col |char_col | |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| | -1| 1| 1| -1| -1 1.000000| |
| | -3| 9| 1.73205078| -5.196152422706632| -3 1.732051| |
| | -5| 25| 2.23606801| -11.180339887498949| -5 2.236068| |
| | -7| 49| 2.64575124| -18.520259177452136| -7 2.645751| |
| | -9| 81| 3| -27| -9 3.000000| |
| +-----------+--------------------+---------------+------------------------+--------------------+ |
| == |
| |
| WITH subquery1 AS |
| (SELECT * |
| FROM test |
| WHERE int_col < 10), |
| subquery2 AS |
| (SELECT * |
| FROM subquery1 |
| WHERE long_col < 100) |
| SELECT * |
| FROM subquery2 |
| WHERE double_col < 0; |
| -- |
| [same as above] |
| == |
| |
| SELECT NULL, |
| 1/NULL, |
| int_col+NULL, |
| int_col+long_col, |
| float_col+NULL, |
| -NULL |
| FROM test |
| WHERE long_col < 100 |
| ORDER BY 4 NULLS LAST; |
| -- |
| +----+--------+--------------+--------------------+----------------+-----+ |
| |NULL|(1/NULL)|(int_col+NULL)|(int_col+long_col) |(float_col+NULL)|-NULL| |
| +----+--------+--------------+--------------------+----------------+-----+ |
| |NULL| NULL| NULL| 0| NULL| NULL| |
| |NULL| NULL| NULL| 6| NULL| NULL| |
| |NULL| NULL| NULL| 6| NULL| NULL| |
| |NULL| NULL| NULL| 20| NULL| NULL| |
| |NULL| NULL| NULL| 20| NULL| NULL| |
| |NULL| NULL| NULL| 42| NULL| NULL| |
| |NULL| NULL| NULL| 42| NULL| NULL| |
| |NULL| NULL| NULL| 72| NULL| NULL| |
| |NULL| NULL| NULL| 72| NULL| NULL| |
| |NULL| NULL| NULL| NULL| NULL| NULL| |
| +----+--------+--------------+--------------------+----------------+-----+ |
| == |
| |
| SELECT int_col " |
| this |
| |
| is multi-line |
| |
| column name |
| " |
| FROM test |
| WHERE int_col < 10 |
| AND long_col < 100 |
| AND double_col < 0; |
| -- |
| +----------------------------------+ |
| | |
| this |
| |
| is multi-line |
| |
| column name |
| | |
| +----------------------------------+ |
| | -1| |
| | -3| |
| | -5| |
| | -7| |
| | -9| |
| +----------------------------------+ |
| == |
| |
| # Alias support. |
| SELECT int_col+100 AS alias_col, |
| char_col AS char_col |
| FROM test |
| WHERE int_col < 10 |
| AND long_col < 100; |
| -- |
| +-----------+--------------------+ |
| |alias_col |char_col | |
| +-----------+--------------------+ |
| | 99| -1 1.000000| |
| | 102| 2 1.414214| |
| | 97| -3 1.732051| |
| | 104| 4 2.000000| |
| | 95| -5 2.236068| |
| | 106| 6 2.449490| |
| | 93| -7 2.645751| |
| | 108| 8 2.828427| |
| | 91| -9 3.000000| |
| +-----------+--------------------+ |
| == |
| |
| # The execution engine currently does not support self-join. |
| SELECT a.int_col, |
| a.int_col*b.int_col, |
| b.long_col |
| FROM test AS a, |
| test AS b |
| WHERE a.int_col*b.int_col = b.long_col; |
| -- |
| ERROR: NestedLoopsJoin does not support self-join yet |
| == |
| |
| # The nested loops join is not a self-join, because the predicate "a.int_col<10" is pushed under the join, which results |
| # in a new relation. |
| SELECT a.int_col, |
| a.int_col*b.int_col, |
| b.long_col |
| FROM test AS a, |
| test AS b |
| WHERE a.long_col < 100 |
| AND a.int_col*b.int_col = b.long_col; |
| -- |
| +-----------+---------------------+--------------------+ |
| |int_col |(a.int_col*b.int_col)|long_col | |
| +-----------+---------------------+--------------------+ |
| | -1| 1| 1| |
| | 2| 4| 4| |
| | -3| 9| 9| |
| | 4| 16| 16| |
| | -5| 25| 25| |
| | 6| 36| 36| |
| | -7| 49| 49| |
| | 8| 64| 64| |
| | -9| 81| 81| |
| +-----------+---------------------+--------------------+ |
| == |
| |
| # Hash join does not support the self-join. |
| SELECT a.int_col, |
| b.int_col |
| FROM test AS a, |
| test AS b |
| WHERE a.int_col = b.int_col; |
| -- |
| ERROR: Self-join is not supported |
| == |
| |
| # This is not a self-join, because there is a Select under the HashJoin for "a.long_col < 50". |
| SELECT a.int_col, |
| b.int_col |
| FROM test AS a, |
| test AS b |
| WHERE a.long_col < 50 |
| AND a.int_col = b.int_col; |
| -- |
| +-----------+-----------+ |
| |int_col |int_col | |
| +-----------+-----------+ |
| | -1| -1| |
| | 2| 2| |
| | -3| -3| |
| | 4| 4| |
| | -5| -5| |
| | 6| 6| |
| | -7| -7| |
| +-----------+-----------+ |
| == |
| |
| # Hash join does not support a join predicate with two different types of attributes. |
| SELECT a.int_col, |
| b.long_col |
| FROM test AS a, |
| test AS b |
| WHERE a.int_col = b.long_col; |
| -- |
| ERROR: Equality join predicate between two attributes of different types is not allowed in HashJoin |
| == |
| |
| # Join with char-type attributes. |
| SELECT a.char_col, |
| b.char_col, |
| a.int_col |
| FROM test AS a, |
| test AS b |
| WHERE a.char_col = b.char_col |
| AND a.long_col < 100; |
| -- |
| +--------------------+--------------------+-----------+ |
| |char_col |char_col |int_col | |
| +--------------------+--------------------+-----------+ |
| | 0 0.000000| 0 0.000000| NULL| |
| | -1 1.000000| -1 1.000000| -1| |
| | 2 1.414214| 2 1.414214| 2| |
| | -3 1.732051| -3 1.732051| -3| |
| | 4 2.000000| 4 2.000000| 4| |
| | -5 2.236068| -5 2.236068| -5| |
| | 6 2.449490| 6 2.449490| 6| |
| | -7 2.645751| -7 2.645751| -7| |
| | 8 2.828427| 8 2.828427| 8| |
| | -9 3.000000| -9 3.000000| -9| |
| +--------------------+--------------------+-----------+ |
| == |
| |
| # Cross-product |
| SELECT a.int_col, |
| b.int_col |
| FROM test AS a, |
| test AS b |
| WHERE a.int_col BETWEEN 0 AND 3 |
| AND b.int_col BETWEEN 0 AND 3; |
| -- |
| +-----------+-----------+ |
| |int_col |int_col | |
| +-----------+-----------+ |
| | 2| 2| |
| +-----------+-----------+ |
| == |
| |
| # Mixed multiple nested loops joins and hash joins |
| SELECT a.int_col, |
| b.int_col, |
| c.float_col, |
| d.float_col+a.int_col, |
| d.float_col, |
| b.double_col, |
| c.int_col |
| FROM test AS a, |
| test AS b, |
| test AS c, |
| (SELECT a.float_col |
| FROM test AS a, |
| test AS b |
| WHERE a.int_col < 5) AS d |
| WHERE a.int_col = b.int_col |
| AND a.long_col = b.long_col |
| AND c.float_col > d.float_col+a.int_col |
| AND d.float_col <= 1 |
| AND a.int_col BETWEEN 0 AND 5 |
| AND c.float_col > 4.7; |
| -- |
| +-----------+-----------+---------------+-----------------------+---------------+------------------------+-----------+ |
| |int_col |int_col |float_col |(d.float_col+a.int_col)|float_col |double_col |int_col | |
| +-----------+-----------+---------------+-----------------------+---------------+------------------------+-----------+ |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.79583168| 3| 1| 2.8284271247461903| -23| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| | 2| 2| 4.89897966| 3| 1| 2.8284271247461903| 24| |
| +-----------+-----------+---------------+-----------------------+---------------+------------------------+-----------+ |
| == |
| |
| # FIXME(qzeng): Inner nested-loops join has no output column, causing query |
| # result to be INCORRECT. |
| SELECT COUNT(*) |
| FROM |
| (SELECT a.float_col |
| FROM test a, |
| test b |
| WHERE a.float_col > 1) c; |
| -- |
| +--------------------+ |
| |COUNT(*) | |
| +--------------------+ |
| | 0| |
| +--------------------+ |
| == |
| |
| SELECT DATE '2000-02-29' + INTERVAL '1 year', |
| DATE '1998-03-31' + INTERVAL '1 month', |
| DATE '2000-03-31' - INTERVAL '1 month', |
| DATE '2000-01-31' + INTERVAL '1 month', |
| DATE '2000-02-29' + INTERVAL '1 day', |
| DATE '2000-02-29' - INTERVAL '1 year' |
| FROM test |
| WHERE int_col = 2; |
| -- |
| +----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+----------------------------------------------------+ |
| |(Datetime('2000-02-29')+YearMonthInterval('1 year'))|(Datetime('1998-03-31')+YearMonthInterval('1 month'))|(Datetime('2000-03-31')-YearMonthInterval('1 month'))|(Datetime('2000-01-31')+YearMonthInterval('1 month'))|(Datetime('2000-02-29')+DatetimeInterval('1 day'))|(Datetime('2000-02-29')-YearMonthInterval('1 year'))| |
| +----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+----------------------------------------------------+ |
| | 2001-02-28T00:00:00| 1998-04-30T00:00:00| 2000-02-29T00:00:00| 2000-02-29T00:00:00| 2000-03-01T00:00:00| 1999-02-28T00:00:00| |
| +----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+----------------------------------------------------+ |
| == |
| |
| SELECT DATE '2000-02-29' - DATE '2000-02-28', |
| DATE '2000-02-29' - DATE '1999-02-28' |
| FROM test |
| WHERE int_col = 2; |
| -- |
| +-----------------------------------------------+-----------------------------------------------+ |
| |(Datetime('2000-02-29')-Datetime('2000-02-28'))|(Datetime('2000-02-29')-Datetime('1999-02-28'))| |
| +-----------------------------------------------+-----------------------------------------------+ |
| | 1 day 00:00:00| 366 days 00:00:00| |
| +-----------------------------------------------+-----------------------------------------------+ |
| == |
| |
| SELECT INTERVAL '1 year' + INTERVAL '1 month', |
| INTERVAL '1 year' + INTERVAL '13 month', |
| INTERVAL '21 day' + INTERVAL '14 day', |
| INTERVAL '21 day' * 4 |
| FROM test |
| WHERE int_col = 2; |
| -- |
| +----------------------------------------------------------+-----------------------------------------------------------+-------------------------------------------------------+----------------------------------------+ |
| |(YearMonthInterval('1 year')+YearMonthInterval('1 month'))|(YearMonthInterval('1 year')+YearMonthInterval('13 month'))|(DatetimeInterval('21 day')+DatetimeInterval('14 day'))|(DatetimeInterval('21 day')*4) | |
| +----------------------------------------------------------+-----------------------------------------------------------+-------------------------------------------------------+----------------------------------------+ |
| | 1 year 1 mon| 2 years 1 mon| 35 days 00:00:00| 84 days 00:00:00| |
| +----------------------------------------------------------+-----------------------------------------------------------+-------------------------------------------------------+----------------------------------------+ |
| == |
| |
| SELECT DATE '+1980-02-29' + INTERVAL '1 year' |
| FROM test |
| WHERE int_col = 2; |
| -- |
| +-----------------------------------------------------+ |
| |(Datetime('+1980-02-29')+YearMonthInterval('1 year'))| |
| +-----------------------------------------------------+ |
| | 1981-02-28T00:00:00| |
| +-----------------------------------------------------+ |
| == |
| |
| SELECT int_col |
| FROM test |
| GROUP BY int_col; |
| -- |
| +-----------+ |
| |int_col | |
| +-----------+ |
| | 2| |
| | 4| |
| | 6| |
| | 8| |
| | 12| |
| | 14| |
| | 16| |
| | 18| |
| | 22| |
| | 24| |
| | -23| |
| | -21| |
| | -19| |
| | -17| |
| | -15| |
| | -13| |
| | -11| |
| | -9| |
| | -7| |
| | -5| |
| | -3| |
| | -1| |
| +-----------+ |
| == |
| |
| SELECT COUNT(*), |
| COUNT(1), |
| COUNT(0), |
| SUM(int_col) / COUNT(*), |
| AVG(int_col+0) * COUNT(1), |
| MAX(double_col+100), |
| MIN(float_col+1) |
| FROM test; |
| -- |
| +--------------------+--------------------+--------------------+-----------------------+---------------------------+------------------------+------------------+ |
| |COUNT(*) |COUNT(1) |COUNT(0) |(SUM(int_col)/COUNT(*))|(AVG((int_col+0))*COUNT(1))|MAX((double_col+100)) |MIN((float_col+1))| |
| +--------------------+--------------------+--------------------+-----------------------+---------------------------+------------------------+------------------+ |
| | 25| 25| 25| 0| -20.454545454545457| 217.57550765359252| 1| |
| +--------------------+--------------------+--------------------+-----------------------+---------------------------+------------------------+------------------+ |
| == |
| |
| SELECT COUNT(NULL) |
| FROM test; |
| -- |
| +--------------------+ |
| |COUNT(NULL) | |
| +--------------------+ |
| | 0| |
| +--------------------+ |
| == |
| |
| SELECT long_col/100 AS group_col, |
| COUNT(*), |
| SUM(int_col) |
| FROM test |
| GROUP BY group_col |
| HAVING MIN(float_col) > 0; |
| -- |
| +--------------------+--------------------+--------------------+ |
| |group_col |COUNT(*) |SUM(int_col) | |
| +--------------------+--------------------+--------------------+ |
| | 1| 5| 2| |
| | 2| 3| -16| |
| | 3| 2| -1| |
| | 4| 3| 1| |
| | 5| 2| 1| |
| +--------------------+--------------------+--------------------+ |
| == |
| |
| SELECT COUNT(*), |
| long_col/100 AS group_col1, |
| long_col/50 AS group_col2 |
| FROM test |
| GROUP BY group_col1, |
| group_col2 |
| HAVING COUNT(*) > 0 |
| AND group_col2 > 5 |
| ORDER BY group_col1, |
| group_col2; |
| -- |
| +--------------------+--------------------+--------------------+ |
| |COUNT(*) |group_col1 |group_col2 | |
| +--------------------+--------------------+--------------------+ |
| | 1| 3| 6| |
| | 1| 3| 7| |
| | 2| 4| 8| |
| | 1| 4| 9| |
| | 1| 5| 10| |
| | 1| 5| 11| |
| +--------------------+--------------------+--------------------+ |
| == |
| |
| |
| CREATE TABLE dates (value DATETIME); |
| INSERT INTO dates VALUES (DATE '2016-01-02 10:20:30'); |
| INSERT INTO dates VALUES (DATE '2016-02-03 11:21:31'); |
| INSERT INTO dates VALUES (DATE '2016-03-04 12:22:32'); |
| |
| SELECT EXTRACT(YEAR FROM value) * 10000 + |
| EXTRACT(MONTH FROM value) * 100 + |
| EXTRACT(DAY FROM value) AS date_digits |
| FROM dates; |
| -- |
| +--------------------+ |
| |date_digits | |
| +--------------------+ |
| | 20160102| |
| | 20160203| |
| | 20160304| |
| +--------------------+ |
| == |
| |
| SELECT SUM(EXTRACT(SECOND FROM value)) |
| FROM dates; |
| -- |
| +-------------------------------+ |
| |SUM(EXTRACT(SECOND FROM value))| |
| +-------------------------------+ |
| | 93| |
| +-------------------------------+ |
| == |
| |
| SELECT EXTRACT(hour FROM value + INTERVAL '1 hour') |
| FROM dates; |
| -- |
| +-----------------------------------------------------+ |
| |EXTRACT(hour FROM (value+DatetimeInterval('1 hour')))| |
| +-----------------------------------------------------+ |
| | 11| |
| | 12| |
| | 13| |
| +-----------------------------------------------------+ |
| == |
| |
| SELECT i, |
| CASE i%2 |
| WHEN 1 THEN 'odd' |
| ELSE 'even' |
| END |
| FROM generate_series(1, 5) AS gs(i); |
| -- |
| +-----------+--------------------------------------------+ |
| |i |CASE (i%2) WHEN 1 THEN 'odd' ELSE 'even' END| |
| +-----------+--------------------------------------------+ |
| | 1| odd| |
| | 2| even| |
| | 3| odd| |
| | 4| even| |
| | 5| odd| |
| +-----------+--------------------------------------------+ |
| == |
| |
| SELECT SUM(CASE WHEN i < 4 THEN i |
| ELSE i * i |
| END) AS result |
| FROM generate_series(1, 5) AS gs(i); |
| -- |
| +--------------------+ |
| |result | |
| +--------------------+ |
| | 47| |
| +--------------------+ |
| == |
| |
| SELECT * |
| FROM generate_series(1, 3) AS gs1(i), |
| generate_series(1, 3) AS gs2(j) |
| WHERE CASE WHEN i < j THEN i |
| ELSE j |
| END > 1; |
| -- |
| +-----------+-----------+ |
| |i |j | |
| +-----------+-----------+ |
| | 2| 2| |
| | 2| 3| |
| | 3| 2| |
| | 3| 3| |
| +-----------+-----------+ |
| == |
| |
| SELECT i AS odd |
| FROM generate_series(0, 10, 1) AS gs1(i) |
| WHERE |
| NOT EXISTS ( |
| SELECT * |
| FROM generate_series(0, 10, 2) AS gs2(even) |
| WHERE i = even |
| ); |
| -- |
| +-----------+ |
| |odd | |
| +-----------+ |
| | 1| |
| | 3| |
| | 5| |
| | 7| |
| | 9| |
| +-----------+ |
| == |
| |
| SELECT i |
| FROM generate_series(0, 100, 3) AS gs1(i) |
| WHERE |
| EXISTS ( |
| SELECT * |
| FROM generate_series(0, 100, 5) AS gs2(i) |
| WHERE gs1.i = gs2.i |
| ) |
| AND NOT EXISTS ( |
| SELECT * |
| FROM generate_series(0, 100, 10) AS gs3(i) |
| WHERE gs1.i = gs3.i |
| ) |
| AND (i < 40 OR i > 60); |
| -- |
| +-----------+ |
| |i | |
| +-----------+ |
| | 15| |
| | 75| |
| +-----------+ |
| == |
| |
| # IN predicate |
| SELECT * |
| FROM generate_series(1, 5) AS gs(i) |
| WHERE i IN (2, 4); |
| -- |
| +-----------+ |
| |i | |
| +-----------+ |
| | 2| |
| | 4| |
| +-----------+ |
| == |
| |
| SELECT * |
| FROM generate_series(1, 5) AS gs(i) |
| WHERE i NOT IN (2, 4); |
| -- |
| +-----------+ |
| |i | |
| +-----------+ |
| | 1| |
| | 3| |
| | 5| |
| +-----------+ |
| == |
| |
| SELECT * |
| FROM generate_series(1, 5) AS gs(i) |
| WHERE i NOT IN (i*i-6, CASE WHEN i < 3 THEN 1 ELSE 4 END); |
| -- |
| +-----------+ |
| |i | |
| +-----------+ |
| | 2| |
| | 5| |
| +-----------+ |
| == |
| |
| SELECT * |
| FROM generate_series(1, 10) AS gs(i) |
| WHERE i NOT IN ( |
| SELECT * |
| FROM generate_series(2, 10, 2) |
| ); |
| -- |
| +-----------+ |
| |i | |
| +-----------+ |
| | 1| |
| | 3| |
| | 5| |
| | 7| |
| | 9| |
| +-----------+ |
| == |
| |
| # TODO(team): Support uncorrelated queries. |
| # SELECT COUNT(*) |
| # FROM test |
| # WHERE double_col < 0 |
| # AND long_col > (SELECT AVG(long_col) FROM test) |
| |
| # TODO(team): Fix Issue #9 to enable COUNT(*). |
| SELECT COUNT(long_col) |
| FROM test, |
| (SELECT AVG(long_col) a FROM test) subquery |
| WHERE double_col < 0 |
| AND long_col > subquery.a; |
| -- |
| +--------------------+ |
| |COUNT(long_col) | |
| +--------------------+ |
| | 5| |
| +--------------------+ |