mirror of https://github.com/citusdata/citus.git
113 lines
2.5 KiB
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;
|