citus/src/test/regress/sql/ch_benchmarks_4.sql

113 lines
2.5 KiB
SQL

SET search_path to "ch benchmarks";
--Q16
SELECT
i_name,
substr(i_data, 1, 3) AS brand,
i_price,
count(DISTINCT (mod((s_w_id * s_i_id),10000))) AS supplier_cnt
FROM
stock,
item
WHERE i_id = s_i_id
AND i_data NOT LIKE 'zz%'
AND (mod((s_w_id * s_i_id),10000) NOT IN
(SELECT su_suppkey
FROM supplier
WHERE su_comment LIKE '%bad%'))
GROUP BY
i_name,
substr(i_data, 1, 3),
i_price
ORDER BY supplier_cnt DESC;
--Q17
SELECT
sum(ol_amount) / 2.0 AS avg_yearly
FROM
order_line,
(SELECT
i_id,
avg(ol_quantity) AS a
FROM
item,
order_line
WHERE i_data LIKE '%b'
AND ol_i_id = i_id
GROUP BY i_id) t
WHERE ol_i_id = t.i_id;
-- this filter was at the end causing the dataset to be empty. it should not have any
-- influence on how the query gets planned so I removed the clause
--AND ol_quantity < t.a;
-- Query 18
SELECT
c_last,
c_id o_id,
o_entry_d,
o_ol_cnt,
sum(ol_amount)
FROM
customer,
oorder,
order_line
WHERE c_id = o_c_id
AND c_w_id = o_w_id
AND c_d_id = o_d_id
AND ol_w_id = o_w_id
AND ol_d_id = o_d_id
AND ol_o_id = o_id
GROUP BY
o_id,
o_w_id,
o_d_id,
c_id,
c_last,
o_entry_d,
o_ol_cnt
HAVING sum(ol_amount) > 5 -- was 200, but thats too big for the dataset
ORDER BY
sum(ol_amount) DESC,
o_entry_d;
-- Query 19
SELECT
sum(ol_amount) AS revenue
FROM
order_line,
item
WHERE ( ol_i_id = i_id
AND i_data LIKE '%a'
AND ol_quantity >= 1
AND ol_quantity <= 10
AND i_price BETWEEN 1 AND 400000
AND ol_w_id IN (1,2,3))
OR ( ol_i_id = i_id
AND i_data LIKE '%b'
AND ol_quantity >= 1
AND ol_quantity <= 10
AND i_price BETWEEN 1 AND 400000
AND ol_w_id IN (1,2,4))
OR ( ol_i_id = i_id
AND i_data LIKE '%c'
AND ol_quantity >= 1
AND ol_quantity <= 10
AND i_price BETWEEN 1 AND 400000
AND ol_w_id IN (1,5,3));
select su_name, su_address
from supplier, nation
where su_suppkey in
(select mod(s_i_id * s_w_id, 10000)
from stock, order_line
where s_i_id in
(select i_id
from item)
and ol_i_id=s_i_id
and ol_delivery_d > '2010-05-23 12:00:00'
group by s_i_id, s_w_id, s_quantity
having 2*s_quantity > sum(ol_quantity))
and su_nationkey = n_nationkey
and n_name = 'GERMANY'
order by su_name;