@@ -2714,188 +2714,3 @@ NOTICE: foo
2714
2714
CONTEXT: PL/pgSQL function inline_code_block line 3 at RAISE
2715
2715
ERROR: bar
2716
2716
CONTEXT: PL/pgSQL function inline_code_block line 4 at RAISE
2717
- --
2718
- -- \crosstabview
2719
- --
2720
- CREATE TABLE ctv_data (v, h, c, i, d) AS
2721
- VALUES
2722
- ('v1','h2','foo', 3, '2015-04-01'::date),
2723
- ('v2','h1','bar', 3, '2015-01-02'),
2724
- ('v1','h0','baz', NULL, '2015-07-12'),
2725
- ('v0','h4','qux', 4, '2015-07-15'),
2726
- ('v0','h4','dbl', -3, '2014-12-15'),
2727
- ('v0',NULL,'qux', 5, '2014-07-15'),
2728
- ('v1','h2','quux',7, '2015-04-04');
2729
- -- running \crosstabview after query uses query in buffer
2730
- SELECT v, EXTRACT(year FROM d), count(*)
2731
- FROM ctv_data
2732
- GROUP BY 1, 2
2733
- ORDER BY 1, 2;
2734
- v | date_part | count
2735
- ----+-----------+-------
2736
- v0 | 2014 | 2
2737
- v0 | 2015 | 1
2738
- v1 | 2015 | 3
2739
- v2 | 2015 | 1
2740
- (4 rows)
2741
-
2742
- -- basic usage with 3 columns
2743
- \crosstabview
2744
- v | 2014 | 2015
2745
- ----+------+------
2746
- v0 | 2 | 1
2747
- v1 | | 3
2748
- v2 | | 1
2749
- (3 rows)
2750
-
2751
- -- ordered months in horizontal header, quoted column name
2752
- SELECT v, to_char(d, 'Mon') AS "month name", EXTRACT(month FROM d) AS num,
2753
- count(*) FROM ctv_data GROUP BY 1,2,3 ORDER BY 1
2754
- \crosstabview v "month name":num 4
2755
- v | Jan | Apr | Jul | Dec
2756
- ----+-----+-----+-----+-----
2757
- v0 | | | 2 | 1
2758
- v1 | | 2 | 1 |
2759
- v2 | 1 | | |
2760
- (3 rows)
2761
-
2762
- -- ordered months in vertical header, ordered years in horizontal header
2763
- SELECT EXTRACT(year FROM d) AS year, to_char(d,'Mon') AS "month name",
2764
- EXTRACT(month FROM d) AS month,
2765
- format('sum=%s avg=%s', sum(i), avg(i)::numeric(2,1))
2766
- FROM ctv_data
2767
- GROUP BY EXTRACT(year FROM d), to_char(d,'Mon'), EXTRACT(month FROM d)
2768
- ORDER BY month
2769
- \crosstabview "month name" year:year format
2770
- month name | 2014 | 2015
2771
- ------------+-----------------+----------------
2772
- Jan | | sum=3 avg=3.0
2773
- Apr | | sum=10 avg=5.0
2774
- Jul | sum=5 avg=5.0 | sum=4 avg=4.0
2775
- Dec | sum=-3 avg=-3.0 |
2776
- (4 rows)
2777
-
2778
- -- combine contents vertically into the same cell (V/H duplicates)
2779
- SELECT v, h, string_agg(c, E'\n') FROM ctv_data GROUP BY v, h ORDER BY 1,2,3
2780
- \crosstabview 1 2 3
2781
- v | h4 | | h0 | h2 | h1
2782
- ----+-----+-----+-----+------+-----
2783
- v0 | qux+| qux | | |
2784
- | dbl | | | |
2785
- v1 | | | baz | foo +|
2786
- | | | | quux |
2787
- v2 | | | | | bar
2788
- (3 rows)
2789
-
2790
- -- horizontal ASC order from window function
2791
- SELECT v,h, string_agg(c, E'\n') AS c, row_number() OVER(ORDER BY h) AS r
2792
- FROM ctv_data GROUP BY v, h ORDER BY 1,3,2
2793
- \crosstabview v h:r c
2794
- v | h0 | h1 | h2 | h4 |
2795
- ----+-----+-----+------+-----+-----
2796
- v0 | | | | qux+| qux
2797
- | | | | dbl |
2798
- v1 | baz | | foo +| |
2799
- | | | quux | |
2800
- v2 | | bar | | |
2801
- (3 rows)
2802
-
2803
- -- horizontal DESC order from window function
2804
- SELECT v, h, string_agg(c, E'\n') AS c, row_number() OVER(ORDER BY h DESC) AS r
2805
- FROM ctv_data GROUP BY v, h ORDER BY 1,3,2
2806
- \crosstabview v h:r c
2807
- v | | h4 | h2 | h1 | h0
2808
- ----+-----+-----+------+-----+-----
2809
- v0 | qux | qux+| | |
2810
- | | dbl | | |
2811
- v1 | | | foo +| | baz
2812
- | | | quux | |
2813
- v2 | | | | bar |
2814
- (3 rows)
2815
-
2816
- -- horizontal ASC order from window function, NULLs pushed rightmost
2817
- SELECT v,h, string_agg(c, E'\n') AS c, row_number() OVER(ORDER BY h NULLS LAST) AS r
2818
- FROM ctv_data GROUP BY v, h ORDER BY 1,3,2
2819
- \crosstabview v h:r c
2820
- v | h0 | h1 | h2 | h4 |
2821
- ----+-----+-----+------+-----+-----
2822
- v0 | | | | qux+| qux
2823
- | | | | dbl |
2824
- v1 | baz | | foo +| |
2825
- | | | quux | |
2826
- v2 | | bar | | |
2827
- (3 rows)
2828
-
2829
- -- only null, no column name, 2 columns: error
2830
- SELECT null,null \crosstabview
2831
- The query must return at least two columns to be shown in crosstab
2832
- -- only null, no column name, 3 columns: works
2833
- SELECT null,null,null \crosstabview
2834
- ?column? |
2835
- ----------+--
2836
- |
2837
- (1 row)
2838
-
2839
- -- null display
2840
- \pset null '#null#'
2841
- SELECT v,h, string_agg(i::text, E'\n') AS i FROM ctv_data
2842
- GROUP BY v, h ORDER BY h,v
2843
- \crosstabview v h i
2844
- v | h0 | h1 | h2 | h4 | #null#
2845
- ----+--------+----+----+----+--------
2846
- v1 | #null# | | 3 +| |
2847
- | | | 7 | |
2848
- v2 | | 3 | | |
2849
- v0 | | | | 4 +| 5
2850
- | | | | -3 |
2851
- (3 rows)
2852
-
2853
- \pset null ''
2854
- -- refer to columns by position
2855
- SELECT v,h,string_agg(i::text, E'\n'), string_agg(c, E'\n')
2856
- FROM ctv_data GROUP BY v, h ORDER BY h,v
2857
- \crosstabview 2 1 4
2858
- h | v1 | v2 | v0
2859
- ----+------+-----+-----
2860
- h0 | baz | |
2861
- h1 | | bar |
2862
- h2 | foo +| |
2863
- | quux | |
2864
- h4 | | | qux+
2865
- | | | dbl
2866
- | | | qux
2867
- (5 rows)
2868
-
2869
- -- refer to columns by positions and names mixed
2870
- SELECT v,h, string_agg(i::text, E'\n') AS i, string_agg(c, E'\n') AS c
2871
- FROM ctv_data GROUP BY v, h ORDER BY h,v
2872
- \crosstabview 1 "h" 4
2873
- v | h0 | h1 | h2 | h4 |
2874
- ----+-----+-----+------+-----+-----
2875
- v1 | baz | | foo +| |
2876
- | | | quux | |
2877
- v2 | | bar | | |
2878
- v0 | | | | qux+| qux
2879
- | | | | dbl |
2880
- (3 rows)
2881
-
2882
- -- error: bad column name
2883
- SELECT v,h,c,i FROM ctv_data
2884
- \crosstabview v h j
2885
- Invalid column name: j
2886
- -- error: bad column number
2887
- SELECT v,h,i,c FROM ctv_data
2888
- \crosstabview 2 1 5
2889
- Invalid column number: 5
2890
- -- error: same H and V columns
2891
- SELECT v,h,i,c FROM ctv_data
2892
- \crosstabview 2 h 4
2893
- The same column cannot be used for both vertical and horizontal headers
2894
- -- error: too many columns
2895
- SELECT a,a,1 FROM generate_series(1,3000) AS a
2896
- \crosstabview
2897
- Maximum number of columns (1600) exceeded
2898
- -- error: only one column
2899
- SELECT 1 \crosstabview
2900
- The query must return at least two columns to be shown in crosstab
2901
- DROP TABLE ctv_data;
0 commit comments