import file=tpch_schema
----

import file=tpch_stats
----

# --------------------------------------------------
# Q21
# Suppliers Who Kept Orders Waiting Query
# Identifies certain suppliers who were not able to ship required parts in a
#  timely manner.
#
# Identifies suppliers, for a given nation, whose product was part of a multi-
# supplier order (with current status of 'F') where they were the only supplier
# who failed to meet the committed delivery date.
# --------------------------------------------------
stats-quality database=tpch set=save_tables_prefix=q21
SELECT
    s_name,
    count(*) AS numwait
FROM
    supplier,
    lineitem l1,
    orders,
    nation
WHERE
    s_suppkey = l1.l_suppkey
    AND o_orderkey = l1.l_orderkey
    AND o_orderstatus = 'F'
    AND l1.l_receiptDATE > l1.l_commitdate
    AND EXISTS (
        SELECT
            *
        FROM
            lineitem l2
        WHERE
            l2.l_orderkey = l1.l_orderkey
            AND l2.l_suppkey <> l1.l_suppkey
    )
    AND NOT EXISTS (
        SELECT
            *
        FROM
            lineitem l3
        WHERE
            l3.l_orderkey = l1.l_orderkey
            AND l3.l_suppkey <> l1.l_suppkey
            AND l3.l_receiptDATE > l3.l_commitdate
    )
    AND s_nationkey = n_nationkey
    AND n_name = 'SAUDI ARABIA'
GROUP BY
    s_name
ORDER BY
    numwait DESC,
    s_name
LIMIT 100;
----
----
top-k
 ├── save-table-name: q21_top_k_1
 ├── columns: s_name:2(char!null) numwait:83(int!null)
 ├── internal-ordering: -83,+2
 ├── k: 100
 ├── cardinality: [0 - 100]
 ├── stats: [rows=100, distinct(2)=100, null(2)=0, distinct(83)=100, null(83)=0]
 ├── key: (2)
 ├── fd: (2)-->(83)
 ├── ordering: -83,+2
 └── group-by (hash)
      ├── save-table-name: q21_group_by_2
      ├── columns: s_name:2(char!null) count_rows:83(int!null)
      ├── grouping columns: s_name:2(char!null)
      ├── stats: [rows=8389.301, distinct(2)=8389.3, null(2)=0, distinct(83)=8389.3, null(83)=0]
      ├── key: (2)
      ├── fd: (2)-->(83)
      ├── inner-join (lookup orders)
      │    ├── save-table-name: q21_lookup_join_3
      │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) l1.l_orderkey:10(int!null) l1.l_suppkey:12(int!null) l1.l_commitdate:21(date!null) l1.l_receiptdate:22(date!null) o_orderkey:28(int!null) o_orderstatus:30(char!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    ├── key columns: [10] = [28]
      │    ├── lookup columns are key
      │    ├── stats: [rows=17924.78, distinct(1)=8350.92, null(1)=0, distinct(2)=8389.3, null(2)=0, distinct(4)=1, null(4)=0, distinct(10)=17713.1, null(10)=0, distinct(12)=8350.92, null(12)=0, distinct(21)=2464.52, null(21)=0, distinct(22)=2552.02, null(22)=0, distinct(28)=17713.1, null(28)=0, distinct(30)=1, null(30)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    ├── fd: ()-->(30,40), (1)-->(2,4), (10)==(28), (28)==(10), (1)==(12), (12)==(1), (4)==(39), (39)==(4)
      │    ├── anti-join (lookup lineitem [as=l3])
      │    │    ├── save-table-name: q21_lookup_join_4
      │    │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) l1.l_orderkey:10(int!null) l1.l_suppkey:12(int!null) l1.l_commitdate:21(date!null) l1.l_receiptdate:22(date!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    ├── key columns: [10] = [63]
      │    │    ├── stats: [rows=17924.78, distinct(1)=399.935, null(1)=0, distinct(2)=399.992, null(2)=0, distinct(4)=1, null(4)=0, distinct(10)=17924.8, null(10)=0, distinct(12)=399.935, null(12)=0, distinct(21)=2465.98, null(21)=0, distinct(22)=2553.97, null(22)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    ├── fd: ()-->(40), (1)-->(2,4), (4)==(39), (39)==(4), (1)==(12), (12)==(1)
      │    │    ├── semi-join (lookup lineitem [as=l2])
      │    │    │    ├── save-table-name: q21_lookup_join_5
      │    │    │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) l1.l_orderkey:10(int!null) l1.l_suppkey:12(int!null) l1.l_commitdate:21(date!null) l1.l_receiptdate:22(date!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    ├── key columns: [10] = [45]
      │    │    │    ├── stats: [rows=26887.16, distinct(1)=399.935, null(1)=0, distinct(2)=399.992, null(2)=0, distinct(4)=1, null(4)=0, distinct(10)=26887.2, null(10)=0, distinct(12)=399.935, null(12)=0, distinct(21)=2466, null(21)=0, distinct(22)=2553.99, null(22)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    ├── fd: ()-->(40), (1)-->(2,4), (4)==(39), (39)==(4), (1)==(12), (12)==(1)
      │    │    │    ├── inner-join (lookup lineitem [as=l1])
      │    │    │    │    ├── save-table-name: q21_lookup_join_6
      │    │    │    │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) l1.l_orderkey:10(int!null) l1.l_suppkey:12(int!null) l1.l_commitdate:21(date!null) l1.l_receiptdate:22(date!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    ├── key columns: [10 13] = [10 13]
      │    │    │    │    ├── lookup columns are key
      │    │    │    │    ├── stats: [rows=80661.49, distinct(1)=399.935, null(1)=0, distinct(2)=399.992, null(2)=0, distinct(4)=1, null(4)=0, distinct(10)=78049.9, null(10)=0, distinct(12)=399.935, null(12)=0, distinct(21)=2466, null(21)=0, distinct(22)=2554, null(22)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    │    ├── fd: ()-->(40), (1)-->(2,4), (4)==(39), (39)==(4), (1)==(12), (12)==(1)
      │    │    │    │    ├── inner-join (lookup lineitem@l_sk [as=l1])
      │    │    │    │    │    ├── save-table-name: q21_lookup_join_7
      │    │    │    │    │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) l1.l_orderkey:10(int!null) l1.l_suppkey:12(int!null) l1.l_linenumber:13(int!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    │    ├── key columns: [1] = [12]
      │    │    │    │    │    ├── stats: [rows=241984.5, distinct(1)=399.935, null(1)=0, distinct(2)=399.992, null(2)=0, distinct(4)=1, null(4)=0, distinct(10)=223798, null(10)=0, distinct(12)=399.935, null(12)=0, distinct(13)=7, null(13)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    │    │    ├── key: (10,13)
      │    │    │    │    │    ├── fd: ()-->(40), (1)-->(2,4), (10,13)-->(12), (4)==(39), (39)==(4), (1)==(12), (12)==(1)
      │    │    │    │    │    ├── inner-join (lookup supplier)
      │    │    │    │    │    │    ├── save-table-name: q21_lookup_join_8
      │    │    │    │    │    │    ├── columns: s_suppkey:1(int!null) s_name:2(char!null) s_nationkey:4(int!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    │    │    ├── key columns: [1] = [1]
      │    │    │    │    │    │    ├── lookup columns are key
      │    │    │    │    │    │    ├── stats: [rows=400, distinct(1)=399.935, null(1)=0, distinct(2)=399.992, null(2)=0, distinct(4)=1, null(4)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    │    │    │    ├── key: (1)
      │    │    │    │    │    │    ├── fd: ()-->(40), (1)-->(2,4), (4)==(39), (39)==(4)
      │    │    │    │    │    │    ├── inner-join (lookup supplier@s_nk)
      │    │    │    │    │    │    │    ├── save-table-name: q21_lookup_join_9
      │    │    │    │    │    │    │    ├── columns: s_suppkey:1(int!null) s_nationkey:4(int!null) n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    │    │    │    ├── key columns: [39] = [4]
      │    │    │    │    │    │    │    ├── stats: [rows=400, distinct(1)=399.935, null(1)=0, distinct(4)=1, null(4)=0, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    │    │    │    │    ├── key: (1)
      │    │    │    │    │    │    │    ├── fd: ()-->(40), (1)-->(4), (4)==(39), (39)==(4)
      │    │    │    │    │    │    │    ├── select
      │    │    │    │    │    │    │    │    ├── save-table-name: q21_select_10
      │    │    │    │    │    │    │    │    ├── columns: n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    │    │    │    │    ├── stats: [rows=1, distinct(39)=1, null(39)=0, distinct(40)=1, null(40)=0]
      │    │    │    │    │    │    │    │    │   histogram(40)=  0        1
      │    │    │    │    │    │    │    │    │                 <--- 'SAUDI ARABIA'
      │    │    │    │    │    │    │    │    ├── key: (39)
      │    │    │    │    │    │    │    │    ├── fd: ()-->(40)
      │    │    │    │    │    │    │    │    ├── scan nation
      │    │    │    │    │    │    │    │    │    ├── save-table-name: q21_scan_11
      │    │    │    │    │    │    │    │    │    ├── columns: n_nationkey:39(int!null) n_name:40(char!null)
      │    │    │    │    │    │    │    │    │    ├── stats: [rows=25, distinct(39)=25, null(39)=0, distinct(40)=25, null(40)=0]
      │    │    │    │    │    │    │    │    │    │   histogram(39)=  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1   0  1
      │    │    │    │    │    │    │    │    │    │                 <--- 0 --- 1 --- 2 --- 3 --- 4 --- 5 --- 6 --- 7 --- 8 --- 9 --- 10 --- 11 --- 12 --- 13 --- 14 --- 15 --- 16 --- 17 --- 18 --- 19 --- 20 --- 21 --- 22 --- 23 --- 24
      │    │    │    │    │    │    │    │    │    │   histogram(40)=  0      1      23      1
      │    │    │    │    │    │    │    │    │    │                 <--- 'ALGERIA' ---- 'VIETNAM'
      │    │    │    │    │    │    │    │    │    ├── key: (39)
      │    │    │    │    │    │    │    │    │    └── fd: (39)-->(40)
      │    │    │    │    │    │    │    │    └── filters
      │    │    │    │    │    │    │    │         └── n_name:40 = 'SAUDI ARABIA' [type=bool, outer=(40), constraints=(/40: [/'SAUDI ARABIA' - /'SAUDI ARABIA']; tight), fd=()-->(40)]
      │    │    │    │    │    │    │    └── filters (true)
      │    │    │    │    │    │    └── filters (true)
      │    │    │    │    │    └── filters (true)
      │    │    │    │    └── filters
      │    │    │    │         └── l1.l_receiptdate:22 > l1.l_commitdate:21 [type=bool, outer=(21,22), constraints=(/21: (/NULL - ]; /22: (/NULL - ])]
      │    │    │    └── filters
      │    │    │         └── l2.l_suppkey:47 != l1.l_suppkey:12 [type=bool, outer=(12,47), constraints=(/12: (/NULL - ]; /47: (/NULL - ])]
      │    │    └── filters
      │    │         ├── l3.l_suppkey:65 != l1.l_suppkey:12 [type=bool, outer=(12,65), constraints=(/12: (/NULL - ]; /65: (/NULL - ])]
      │    │         └── l3.l_receiptdate:75 > l3.l_commitdate:74 [type=bool, outer=(74,75), constraints=(/74: (/NULL - ]; /75: (/NULL - ])]
      │    └── filters
      │         └── o_orderstatus:30 = 'F' [type=bool, outer=(30), constraints=(/30: [/'F' - /'F']; tight), fd=()-->(30)]
      └── aggregations
           └── count-rows [as=count_rows:83, type=int]

----Stats for q21_top_k_1----
column_names  row_count  distinct_count  null_count
{numwait}     100        8               0
{s_name}      100        100             0
~~~~
column_names  row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{numwait}     100.00         1.00           100.00              12.50 <==           0.00            1.00
{s_name}      100.00         1.00           100.00              1.00                0.00            1.00

----Stats for q21_group_by_2----
column_names  row_count  distinct_count  null_count
{count_rows}  411        17              0
{s_name}      411        411             0
~~~~
column_names  row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{count_rows}  8389.00        20.41 <==      8389.00             493.47 <==          0.00            1.00
{s_name}      8389.00        20.41 <==      8389.00             20.41 <==           0.00            1.00

----Stats for q21_lookup_join_3----
column_names     row_count  distinct_count  null_count
{l_commitdate}   4141       1188            0
{l_orderkey}     4141       4127            0
{l_receiptdate}  4141       1174            0
{l_suppkey}      4141       411             0
{n_name}         4141       1               0
{n_nationkey}    4141       1               0
{o_orderkey}     4141       4127            0
{o_orderstatus}  4141       1               0
{s_name}         4141       411             0
{s_nationkey}    4141       1               0
{s_suppkey}      4141       411             0
~~~~
column_names     row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{l_commitdate}   17925.00       4.33 <==       2465.00             2.07 <==            0.00            1.00
{l_orderkey}     17925.00       4.33 <==       17713.00            4.29 <==            0.00            1.00
{l_receiptdate}  17925.00       4.33 <==       2552.00             2.17 <==            0.00            1.00
{l_suppkey}      17925.00       4.33 <==       8351.00             20.32 <==           0.00            1.00
{n_name}         17925.00       4.33 <==       1.00                1.00                0.00            1.00
{n_nationkey}    17925.00       4.33 <==       1.00                1.00                0.00            1.00
{o_orderkey}     17925.00       4.33 <==       17713.00            4.29 <==            0.00            1.00
{o_orderstatus}  17925.00       4.33 <==       1.00                1.00                0.00            1.00
{s_name}         17925.00       4.33 <==       8389.00             20.41 <==           0.00            1.00
{s_nationkey}    17925.00       4.33 <==       1.00                1.00                0.00            1.00
{s_suppkey}      17925.00       4.33 <==       8351.00             20.32 <==           0.00            1.00

----Stats for q21_lookup_join_4----
column_names     row_count  distinct_count  null_count
{l_commitdate}   8357       2357            0
{l_orderkey}     8357       8343            0
{l_receiptdate}  8357       2379            0
{l_suppkey}      8357       411             0
{n_name}         8357       1               0
{n_nationkey}    8357       1               0
{s_name}         8357       411             0
{s_nationkey}    8357       1               0
{s_suppkey}      8357       411             0
~~~~
column_names     row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{l_commitdate}   17925.00       2.14 <==       2466.00             1.05                0.00            1.00
{l_orderkey}     17925.00       2.14 <==       17925.00            2.15 <==            0.00            1.00
{l_receiptdate}  17925.00       2.14 <==       2554.00             1.07                0.00            1.00
{l_suppkey}      17925.00       2.14 <==       400.00              1.03                0.00            1.00
{n_name}         17925.00       2.14 <==       1.00                1.00                0.00            1.00
{n_nationkey}    17925.00       2.14 <==       1.00                1.00                0.00            1.00
{s_name}         17925.00       2.14 <==       400.00              1.03                0.00            1.00
{s_nationkey}    17925.00       2.14 <==       1.00                1.00                0.00            1.00
{s_suppkey}      17925.00       2.14 <==       400.00              1.03                0.00            1.00

----Stats for q21_lookup_join_5----
column_names     row_count  distinct_count  null_count
{l_commitdate}   151237     2464            0
{l_orderkey}     151237     144608          0
{l_receiptdate}  151237     2512            0
{l_suppkey}      151237     411             0
{n_name}         151237     1               0
{n_nationkey}    151237     1               0
{s_name}         151237     411             0
{s_nationkey}    151237     1               0
{s_suppkey}      151237     411             0
~~~~
column_names     row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{l_commitdate}   26887.00       5.62 <==       2466.00             1.00                0.00            1.00
{l_orderkey}     26887.00       5.62 <==       26887.00            5.38 <==            0.00            1.00
{l_receiptdate}  26887.00       5.62 <==       2554.00             1.02                0.00            1.00
{l_suppkey}      26887.00       5.62 <==       400.00              1.03                0.00            1.00
{n_name}         26887.00       5.62 <==       1.00                1.00                0.00            1.00
{n_nationkey}    26887.00       5.62 <==       1.00                1.00                0.00            1.00
{s_name}         26887.00       5.62 <==       400.00              1.03                0.00            1.00
{s_nationkey}    26887.00       5.62 <==       1.00                1.00                0.00            1.00
{s_suppkey}      26887.00       5.62 <==       400.00              1.03                0.00            1.00

----Stats for q21_lookup_join_6----
column_names     row_count  distinct_count  null_count
{l_commitdate}   156739     2464            0
{l_orderkey}     156739     149986          0
{l_receiptdate}  156739     2512            0
{l_suppkey}      156739     411             0
{n_name}         156739     1               0
{n_nationkey}    156739     1               0
{s_name}         156739     411             0
{s_nationkey}    156739     1               0
{s_suppkey}      156739     411             0
~~~~
column_names     row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{l_commitdate}   80661.00       1.94 <==       2466.00             1.00                0.00            1.00
{l_orderkey}     80661.00       1.94 <==       78050.00            1.92 <==            0.00            1.00
{l_receiptdate}  80661.00       1.94 <==       2554.00             1.02                0.00            1.00
{l_suppkey}      80661.00       1.94 <==       400.00              1.03                0.00            1.00
{n_name}         80661.00       1.94 <==       1.00                1.00                0.00            1.00
{n_nationkey}    80661.00       1.94 <==       1.00                1.00                0.00            1.00
{s_name}         80661.00       1.94 <==       400.00              1.03                0.00            1.00
{s_nationkey}    80661.00       1.94 <==       1.00                1.00                0.00            1.00
{s_suppkey}      80661.00       1.94 <==       400.00              1.03                0.00            1.00

----Stats for q21_lookup_join_7----
column_names    row_count  distinct_count  null_count
{l_linenumber}  247140     7               0
{l_orderkey}    247140     228525          0
{l_suppkey}     247140     411             0
{n_name}        247140     1               0
{n_nationkey}   247140     1               0
{s_name}        247140     411             0
{s_nationkey}   247140     1               0
{s_suppkey}     247140     411             0
~~~~
column_names    row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{l_linenumber}  241984.00      1.02           7.00                1.00                0.00            1.00
{l_orderkey}    241984.00      1.02           223798.00           1.02                0.00            1.00
{l_suppkey}     241984.00      1.02           400.00              1.03                0.00            1.00
{n_name}        241984.00      1.02           1.00                1.00                0.00            1.00
{n_nationkey}   241984.00      1.02           1.00                1.00                0.00            1.00
{s_name}        241984.00      1.02           400.00              1.03                0.00            1.00
{s_nationkey}   241984.00      1.02           1.00                1.00                0.00            1.00
{s_suppkey}     241984.00      1.02           400.00              1.03                0.00            1.00

----Stats for q21_lookup_join_8----
column_names   row_count  distinct_count  null_count
{n_name}       411        1               0
{n_nationkey}  411        1               0
{s_name}       411        411             0
{s_nationkey}  411        1               0
{s_suppkey}    411        411             0
~~~~
column_names   row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{n_name}       400.00         1.03           1.00                1.00                0.00            1.00
{n_nationkey}  400.00         1.03           1.00                1.00                0.00            1.00
{s_name}       400.00         1.03           400.00              1.03                0.00            1.00
{s_nationkey}  400.00         1.03           1.00                1.00                0.00            1.00
{s_suppkey}    400.00         1.03           400.00              1.03                0.00            1.00

----Stats for q21_lookup_join_9----
column_names   row_count  distinct_count  null_count
{n_name}       411        1               0
{n_nationkey}  411        1               0
{s_nationkey}  411        1               0
{s_suppkey}    411        411             0
~~~~
column_names   row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{n_name}       400.00         1.03           1.00                1.00                0.00            1.00
{n_nationkey}  400.00         1.03           1.00                1.00                0.00            1.00
{s_nationkey}  400.00         1.03           1.00                1.00                0.00            1.00
{s_suppkey}    400.00         1.03           400.00              1.03                0.00            1.00

----Stats for q21_select_10----
column_names   row_count  distinct_count  null_count
{n_name}       1          1               0
{n_nationkey}  1          1               0
~~~~
column_names   row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{n_name}       1.00           1.00           1.00                1.00                0.00            1.00
{n_nationkey}  1.00           1.00           1.00                1.00                0.00            1.00

----Stats for q21_scan_11----
column_names   row_count  distinct_count  null_count
{n_name}       25         25              0
{n_nationkey}  25         25              0
~~~~
column_names   row_count_est  row_count_err  distinct_count_est  distinct_count_err  null_count_est  null_count_err
{n_name}       25.00          1.00           25.00               1.00                0.00            1.00
{n_nationkey}  25.00          1.00           25.00               1.00                0.00            1.00
----
----
