add tests to cabal
This commit is contained in:
parent
3f0ff9aec0
commit
44b82a797f
|
@ -23,7 +23,7 @@ library
|
||||||
Language.SQL.SimpleSQL.Parser,
|
Language.SQL.SimpleSQL.Parser,
|
||||||
Language.SQL.SimpleSQL.Syntax
|
Language.SQL.SimpleSQL.Syntax
|
||||||
other-modules: Language.SQL.SimpleSQL.Fixity
|
other-modules: Language.SQL.SimpleSQL.Fixity
|
||||||
-- other-extensions:
|
other-extensions: TupleSections
|
||||||
build-depends: base >=4.6 && <4.7,
|
build-depends: base >=4.6 && <4.7,
|
||||||
parsec >=3.1 && <3.2,
|
parsec >=3.1 && <3.2,
|
||||||
mtl >=2.1 && <2.2,
|
mtl >=2.1 && <2.2,
|
||||||
|
@ -31,4 +31,27 @@ library
|
||||||
haskell-src-exts >= 1.14 && < 1.15
|
haskell-src-exts >= 1.14 && < 1.15
|
||||||
-- hs-source-dirs:
|
-- hs-source-dirs:
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
ghc-options: -Wall
|
ghc-options: -Wall
|
||||||
|
|
||||||
|
Test-Suite Tests
|
||||||
|
type: exitcode-stdio-1.0
|
||||||
|
main-is: RunTests.lhs
|
||||||
|
hs-source-dirs: .,tools
|
||||||
|
Build-Depends: base >=4.6 && <4.7,
|
||||||
|
parsec >=3.1 && <3.2,
|
||||||
|
mtl >=2.1 && <2.2,
|
||||||
|
pretty >= 1.1 && < 1.2,
|
||||||
|
haskell-src-exts >= 1.14 && < 1.15,
|
||||||
|
|
||||||
|
HUnit >= 1.2 && < 1.3,
|
||||||
|
test-framework >= 0.8 && < 0.9,
|
||||||
|
test-framework-hunit >= 0.3 && < 0.4
|
||||||
|
|
||||||
|
Other-Modules: Language.SQL.SimpleSQL.Pretty,
|
||||||
|
Language.SQL.SimpleSQL.Parser,
|
||||||
|
Language.SQL.SimpleSQL.Syntax,
|
||||||
|
Language.SQL.SimpleSQL.Fixity,
|
||||||
|
Language.SQL.SimpleSQL.Tests
|
||||||
|
other-extensions: TupleSections
|
||||||
|
default-language: Haskell2010
|
||||||
|
ghc-options: -Wall
|
||||||
|
|
|
@ -1,12 +1,17 @@
|
||||||
|
|
||||||
> module Tests (testData, TestItem(..), runTests) where
|
> module Language.SQL.SimpleSQL.Tests
|
||||||
|
> (testData
|
||||||
|
> ,tests
|
||||||
|
> ,TestItem(..)
|
||||||
|
> ) where
|
||||||
|
|
||||||
> import Language.SQL.SimpleSQL.Syntax
|
> import Language.SQL.SimpleSQL.Syntax
|
||||||
> import Language.SQL.SimpleSQL.Pretty
|
> import Language.SQL.SimpleSQL.Pretty
|
||||||
> import Language.SQL.SimpleSQL.Parser
|
> import Language.SQL.SimpleSQL.Parser
|
||||||
> import qualified Test.HUnit as H
|
> import qualified Test.HUnit as H
|
||||||
> import Control.Monad
|
|
||||||
> import Tpch
|
> import Tpch
|
||||||
|
> import Test.Framework
|
||||||
|
> import Test.Framework.Providers.HUnit
|
||||||
|
|
||||||
> data TestItem = Group String [TestItem]
|
> data TestItem = Group String [TestItem]
|
||||||
> | TestScalarExpr String ScalarExpr
|
> | TestScalarExpr String ScalarExpr
|
||||||
|
@ -476,13 +481,15 @@
|
||||||
> ,tpchTests
|
> ,tpchTests
|
||||||
> ]
|
> ]
|
||||||
|
|
||||||
|
> tests :: Test.Framework.Test
|
||||||
|
> tests = itemToTest testData
|
||||||
|
|
||||||
> runTests :: IO ()
|
> --runTests :: IO ()
|
||||||
> runTests = void $ H.runTestTT $ itemToTest testData
|
> --runTests = void $ H.runTestTT $ itemToTest testData
|
||||||
|
|
||||||
> itemToTest :: TestItem -> H.Test
|
> itemToTest :: TestItem -> Test.Framework.Test
|
||||||
> itemToTest (Group nm ts) =
|
> itemToTest (Group nm ts) =
|
||||||
> H.TestLabel nm $ H.TestList $ map itemToTest ts
|
> testGroup nm $ map itemToTest ts
|
||||||
> itemToTest (TestScalarExpr str expected) =
|
> itemToTest (TestScalarExpr str expected) =
|
||||||
> toTest parseScalarExpr prettyScalarExpr str expected
|
> toTest parseScalarExpr prettyScalarExpr str expected
|
||||||
> itemToTest (TestQueryExpr str expected) =
|
> itemToTest (TestQueryExpr str expected) =
|
||||||
|
@ -497,8 +504,8 @@
|
||||||
> -> (a -> String)
|
> -> (a -> String)
|
||||||
> -> String
|
> -> String
|
||||||
> -> a
|
> -> a
|
||||||
> -> H.Test
|
> -> Test.Framework.Test
|
||||||
> toTest parser pp str expected = H.TestLabel str $ H.TestCase $ do
|
> toTest parser pp str expected = testCase str $ do
|
||||||
> let egot = parser "" Nothing str
|
> let egot = parser "" Nothing str
|
||||||
> case egot of
|
> case egot of
|
||||||
> Left e -> H.assertFailure $ peFormattedError e
|
> Left e -> H.assertFailure $ peFormattedError e
|
||||||
|
@ -514,8 +521,8 @@
|
||||||
> (String -> Maybe (Int,Int) -> String -> Either ParseError a)
|
> (String -> Maybe (Int,Int) -> String -> Either ParseError a)
|
||||||
> -> (a -> String)
|
> -> (a -> String)
|
||||||
> -> String
|
> -> String
|
||||||
> -> H.Test
|
> -> Test.Framework.Test
|
||||||
> toPTest parser pp str = H.TestLabel str $ H.TestCase $ do
|
> toPTest parser pp str = testCase str $ do
|
||||||
> let egot = parser "" Nothing str
|
> let egot = parser "" Nothing str
|
||||||
> case egot of
|
> case egot of
|
||||||
> Left e -> H.assertFailure $ peFormattedError e
|
> Left e -> H.assertFailure $ peFormattedError e
|
8
tools/RunTests.lhs
Normal file
8
tools/RunTests.lhs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
> import Test.Framework
|
||||||
|
|
||||||
|
> import Language.SQL.SimpleSQL.Tests
|
||||||
|
|
||||||
|
> main :: IO ()
|
||||||
|
> main = defaultMain [tests]
|
689
tpch.sql
689
tpch.sql
|
@ -1,689 +0,0 @@
|
||||||
-- q1
|
|
||||||
select
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus,
|
|
||||||
sum(l_quantity) as sum_qty,
|
|
||||||
sum(l_extendedprice) as sum_base_price,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
|
|
||||||
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
|
|
||||||
avg(l_quantity) as avg_qty,
|
|
||||||
avg(l_extendedprice) as avg_price,
|
|
||||||
avg(l_discount) as avg_disc,
|
|
||||||
count(*) as count_order
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_shipdate <= date '1998-12-01' - interval '63' day (3)
|
|
||||||
group by
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus
|
|
||||||
order by
|
|
||||||
l_returnflag,
|
|
||||||
l_linestatus;
|
|
||||||
|
|
||||||
-- q2
|
|
||||||
|
|
||||||
select
|
|
||||||
s_acctbal,
|
|
||||||
s_name,
|
|
||||||
n_name,
|
|
||||||
p_partkey,
|
|
||||||
p_mfgr,
|
|
||||||
s_address,
|
|
||||||
s_phone,
|
|
||||||
s_comment
|
|
||||||
from
|
|
||||||
part,
|
|
||||||
supplier,
|
|
||||||
partsupp,
|
|
||||||
nation,
|
|
||||||
region
|
|
||||||
where
|
|
||||||
p_partkey = ps_partkey
|
|
||||||
and s_suppkey = ps_suppkey
|
|
||||||
and p_size = 15
|
|
||||||
and p_type like '%BRASS'
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_regionkey = r_regionkey
|
|
||||||
and r_name = 'EUROPE'
|
|
||||||
and ps_supplycost = (
|
|
||||||
select
|
|
||||||
min(ps_supplycost)
|
|
||||||
from
|
|
||||||
partsupp,
|
|
||||||
supplier,
|
|
||||||
nation,
|
|
||||||
region
|
|
||||||
where
|
|
||||||
p_partkey = ps_partkey
|
|
||||||
and s_suppkey = ps_suppkey
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_regionkey = r_regionkey
|
|
||||||
and r_name = 'EUROPE'
|
|
||||||
)
|
|
||||||
order by
|
|
||||||
s_acctbal desc,
|
|
||||||
n_name,
|
|
||||||
s_name,
|
|
||||||
p_partkey
|
|
||||||
limit 100;
|
|
||||||
--q3
|
|
||||||
select
|
|
||||||
l_orderkey,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as revenue,
|
|
||||||
o_orderdate,
|
|
||||||
o_shippriority
|
|
||||||
from
|
|
||||||
customer,
|
|
||||||
orders,
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
c_mktsegment = 'MACHINERY'
|
|
||||||
and c_custkey = o_custkey
|
|
||||||
and l_orderkey = o_orderkey
|
|
||||||
and o_orderdate < date '1995-03-21'
|
|
||||||
and l_shipdate > date '1995-03-21'
|
|
||||||
group by
|
|
||||||
l_orderkey,
|
|
||||||
o_orderdate,
|
|
||||||
o_shippriority
|
|
||||||
order by
|
|
||||||
revenue desc,
|
|
||||||
o_orderdate
|
|
||||||
limit 10;
|
|
||||||
|
|
||||||
-- q4
|
|
||||||
select
|
|
||||||
o_orderpriority,
|
|
||||||
count(*) as order_count
|
|
||||||
from
|
|
||||||
orders
|
|
||||||
where
|
|
||||||
o_orderdate >= date '1996-03-01'
|
|
||||||
and o_orderdate < date '1996-03-01' + interval '3' month
|
|
||||||
and exists (
|
|
||||||
select
|
|
||||||
*
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_orderkey = o_orderkey
|
|
||||||
and l_commitdate < l_receiptdate
|
|
||||||
)
|
|
||||||
group by
|
|
||||||
o_orderpriority
|
|
||||||
order by
|
|
||||||
o_orderpriority;
|
|
||||||
--q5
|
|
||||||
select
|
|
||||||
n_name,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as revenue
|
|
||||||
from
|
|
||||||
customer,
|
|
||||||
orders,
|
|
||||||
lineitem,
|
|
||||||
supplier,
|
|
||||||
nation,
|
|
||||||
region
|
|
||||||
where
|
|
||||||
c_custkey = o_custkey
|
|
||||||
and l_orderkey = o_orderkey
|
|
||||||
and l_suppkey = s_suppkey
|
|
||||||
and c_nationkey = s_nationkey
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_regionkey = r_regionkey
|
|
||||||
and r_name = 'EUROPE'
|
|
||||||
and o_orderdate >= date '1997-01-01'
|
|
||||||
and o_orderdate < date '1997-01-01' + interval '1' year
|
|
||||||
group by
|
|
||||||
n_name
|
|
||||||
order by
|
|
||||||
revenue desc;
|
|
||||||
|
|
||||||
-- q6
|
|
||||||
|
|
||||||
select
|
|
||||||
sum(l_extendedprice * l_discount) as revenue
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_shipdate >= date '1997-01-01'
|
|
||||||
and l_shipdate < date '1997-01-01' + interval '1' year
|
|
||||||
and l_discount between 0.07 - 0.01 and 0.07 + 0.01
|
|
||||||
and l_quantity < 24;
|
|
||||||
|
|
||||||
--q7
|
|
||||||
select
|
|
||||||
supp_nation,
|
|
||||||
cust_nation,
|
|
||||||
l_year,
|
|
||||||
sum(volume) as revenue
|
|
||||||
from
|
|
||||||
(
|
|
||||||
select
|
|
||||||
n1.n_name as supp_nation,
|
|
||||||
n2.n_name as cust_nation,
|
|
||||||
extract(year from l_shipdate) as l_year,
|
|
||||||
l_extendedprice * (1 - l_discount) as volume
|
|
||||||
from
|
|
||||||
supplier,
|
|
||||||
lineitem,
|
|
||||||
orders,
|
|
||||||
customer,
|
|
||||||
nation n1,
|
|
||||||
nation n2
|
|
||||||
where
|
|
||||||
s_suppkey = l_suppkey
|
|
||||||
and o_orderkey = l_orderkey
|
|
||||||
and c_custkey = o_custkey
|
|
||||||
and s_nationkey = n1.n_nationkey
|
|
||||||
and c_nationkey = n2.n_nationkey
|
|
||||||
and (
|
|
||||||
(n1.n_name = 'PERU' and n2.n_name = 'IRAQ')
|
|
||||||
or (n1.n_name = 'IRAQ' and n2.n_name = 'PERU')
|
|
||||||
)
|
|
||||||
and l_shipdate between date '1995-01-01' and date '1996-12-31'
|
|
||||||
) as shipping
|
|
||||||
group by
|
|
||||||
supp_nation,
|
|
||||||
cust_nation,
|
|
||||||
l_year
|
|
||||||
order by
|
|
||||||
supp_nation,
|
|
||||||
cust_nation,
|
|
||||||
l_year;
|
|
||||||
-- q8
|
|
||||||
select
|
|
||||||
o_year,
|
|
||||||
sum(case
|
|
||||||
when nation = 'IRAQ' then volume
|
|
||||||
else 0
|
|
||||||
end) / sum(volume) as mkt_share
|
|
||||||
from
|
|
||||||
(
|
|
||||||
select
|
|
||||||
extract(year from o_orderdate) as o_year,
|
|
||||||
l_extendedprice * (1 - l_discount) as volume,
|
|
||||||
n2.n_name as nation
|
|
||||||
from
|
|
||||||
part,
|
|
||||||
supplier,
|
|
||||||
lineitem,
|
|
||||||
orders,
|
|
||||||
customer,
|
|
||||||
nation n1,
|
|
||||||
nation n2,
|
|
||||||
region
|
|
||||||
where
|
|
||||||
p_partkey = l_partkey
|
|
||||||
and s_suppkey = l_suppkey
|
|
||||||
and l_orderkey = o_orderkey
|
|
||||||
and o_custkey = c_custkey
|
|
||||||
and c_nationkey = n1.n_nationkey
|
|
||||||
and n1.n_regionkey = r_regionkey
|
|
||||||
and r_name = 'MIDDLE EAST'
|
|
||||||
and s_nationkey = n2.n_nationkey
|
|
||||||
and o_orderdate between date '1995-01-01' and date '1996-12-31'
|
|
||||||
and p_type = 'STANDARD ANODIZED BRASS'
|
|
||||||
) as all_nations
|
|
||||||
group by
|
|
||||||
o_year
|
|
||||||
order by
|
|
||||||
o_year;
|
|
||||||
-- q9
|
|
||||||
|
|
||||||
select
|
|
||||||
nation,
|
|
||||||
o_year,
|
|
||||||
sum(amount) as sum_profit
|
|
||||||
from
|
|
||||||
(
|
|
||||||
select
|
|
||||||
n_name as nation,
|
|
||||||
extract(year from o_orderdate) as o_year,
|
|
||||||
l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
|
|
||||||
from
|
|
||||||
part,
|
|
||||||
supplier,
|
|
||||||
lineitem,
|
|
||||||
partsupp,
|
|
||||||
orders,
|
|
||||||
nation
|
|
||||||
where
|
|
||||||
s_suppkey = l_suppkey
|
|
||||||
and ps_suppkey = l_suppkey
|
|
||||||
and ps_partkey = l_partkey
|
|
||||||
and p_partkey = l_partkey
|
|
||||||
and o_orderkey = l_orderkey
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and p_name like '%antique%'
|
|
||||||
) as profit
|
|
||||||
group by
|
|
||||||
nation,
|
|
||||||
o_year
|
|
||||||
order by
|
|
||||||
nation,
|
|
||||||
o_year desc;
|
|
||||||
-- q10
|
|
||||||
|
|
||||||
select
|
|
||||||
c_custkey,
|
|
||||||
c_name,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as revenue,
|
|
||||||
c_acctbal,
|
|
||||||
n_name,
|
|
||||||
c_address,
|
|
||||||
c_phone,
|
|
||||||
c_comment
|
|
||||||
from
|
|
||||||
customer,
|
|
||||||
orders,
|
|
||||||
lineitem,
|
|
||||||
nation
|
|
||||||
where
|
|
||||||
c_custkey = o_custkey
|
|
||||||
and l_orderkey = o_orderkey
|
|
||||||
and o_orderdate >= date '1993-12-01'
|
|
||||||
and o_orderdate < date '1993-12-01' + interval '3' month
|
|
||||||
and l_returnflag = 'R'
|
|
||||||
and c_nationkey = n_nationkey
|
|
||||||
group by
|
|
||||||
c_custkey,
|
|
||||||
c_name,
|
|
||||||
c_acctbal,
|
|
||||||
c_phone,
|
|
||||||
n_name,
|
|
||||||
c_address,
|
|
||||||
c_comment
|
|
||||||
order by
|
|
||||||
revenue desc
|
|
||||||
limit 20;
|
|
||||||
|
|
||||||
-- q11
|
|
||||||
select
|
|
||||||
ps_partkey,
|
|
||||||
sum(ps_supplycost * ps_availqty) as value
|
|
||||||
from
|
|
||||||
partsupp,
|
|
||||||
supplier,
|
|
||||||
nation
|
|
||||||
where
|
|
||||||
ps_suppkey = s_suppkey
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_name = 'CHINA'
|
|
||||||
group by
|
|
||||||
ps_partkey having
|
|
||||||
sum(ps_supplycost * ps_availqty) > (
|
|
||||||
select
|
|
||||||
sum(ps_supplycost * ps_availqty) * 0.0001000000
|
|
||||||
from
|
|
||||||
partsupp,
|
|
||||||
supplier,
|
|
||||||
nation
|
|
||||||
where
|
|
||||||
ps_suppkey = s_suppkey
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_name = 'CHINA'
|
|
||||||
)
|
|
||||||
order by
|
|
||||||
value desc;
|
|
||||||
-- q12
|
|
||||||
|
|
||||||
select
|
|
||||||
l_shipmode,
|
|
||||||
sum(case
|
|
||||||
when o_orderpriority = '1-URGENT'
|
|
||||||
or o_orderpriority = '2-HIGH'
|
|
||||||
then 1
|
|
||||||
else 0
|
|
||||||
end) as high_line_count,
|
|
||||||
sum(case
|
|
||||||
when o_orderpriority <> '1-URGENT'
|
|
||||||
and o_orderpriority <> '2-HIGH'
|
|
||||||
then 1
|
|
||||||
else 0
|
|
||||||
end) as low_line_count
|
|
||||||
from
|
|
||||||
orders,
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
o_orderkey = l_orderkey
|
|
||||||
and l_shipmode in ('AIR', 'RAIL')
|
|
||||||
and l_commitdate < l_receiptdate
|
|
||||||
and l_shipdate < l_commitdate
|
|
||||||
and l_receiptdate >= date '1994-01-01'
|
|
||||||
and l_receiptdate < date '1994-01-01' + interval '1' year
|
|
||||||
group by
|
|
||||||
l_shipmode
|
|
||||||
order by
|
|
||||||
l_shipmode;
|
|
||||||
|
|
||||||
-- q13
|
|
||||||
|
|
||||||
select
|
|
||||||
c_count,
|
|
||||||
count(*) as custdist
|
|
||||||
from
|
|
||||||
(
|
|
||||||
select
|
|
||||||
c_custkey,
|
|
||||||
count(o_orderkey)
|
|
||||||
from
|
|
||||||
customer left outer join orders on
|
|
||||||
c_custkey = o_custkey
|
|
||||||
and o_comment not like '%pending%requests%'
|
|
||||||
group by
|
|
||||||
c_custkey
|
|
||||||
) as c_orders (c_custkey, c_count)
|
|
||||||
group by
|
|
||||||
c_count
|
|
||||||
order by
|
|
||||||
custdist desc,
|
|
||||||
c_count desc;
|
|
||||||
|
|
||||||
-- q14
|
|
||||||
|
|
||||||
select
|
|
||||||
100.00 * sum(case
|
|
||||||
when p_type like 'PROMO%'
|
|
||||||
then l_extendedprice * (1 - l_discount)
|
|
||||||
else 0
|
|
||||||
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
|
|
||||||
from
|
|
||||||
lineitem,
|
|
||||||
part
|
|
||||||
where
|
|
||||||
l_partkey = p_partkey
|
|
||||||
and l_shipdate >= date '1994-12-01'
|
|
||||||
and l_shipdate < date '1994-12-01' + interval '1' month;
|
|
||||||
|
|
||||||
-- q15
|
|
||||||
/*create view revenue0 (supplier_no, total_revenue) as
|
|
||||||
select
|
|
||||||
l_suppkey,
|
|
||||||
sum(l_extendedprice * (1 - l_discount))
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_shipdate >= date '1995-06-01'
|
|
||||||
and l_shipdate < date '1995-06-01' + interval '3' month
|
|
||||||
group by
|
|
||||||
l_suppkey;*/
|
|
||||||
|
|
||||||
with
|
|
||||||
revenue0 as
|
|
||||||
(select
|
|
||||||
l_suppkey as supplier_no,
|
|
||||||
sum(l_extendedprice * (1 - l_discount)) as total_revenue
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_shipdate >= date '1995-06-01'
|
|
||||||
and l_shipdate < date '1995-06-01' + interval '3' month
|
|
||||||
group by
|
|
||||||
l_suppkey)
|
|
||||||
select
|
|
||||||
s_suppkey,
|
|
||||||
s_name,
|
|
||||||
s_address,
|
|
||||||
s_phone,
|
|
||||||
total_revenue
|
|
||||||
from
|
|
||||||
supplier,
|
|
||||||
revenue0
|
|
||||||
where
|
|
||||||
s_suppkey = supplier_no
|
|
||||||
and total_revenue = (
|
|
||||||
select
|
|
||||||
max(total_revenue)
|
|
||||||
from
|
|
||||||
revenue0
|
|
||||||
)
|
|
||||||
order by
|
|
||||||
s_suppkey;
|
|
||||||
|
|
||||||
-- q16
|
|
||||||
|
|
||||||
select
|
|
||||||
p_brand,
|
|
||||||
p_type,
|
|
||||||
p_size,
|
|
||||||
count(distinct ps_suppkey) as supplier_cnt
|
|
||||||
from
|
|
||||||
partsupp,
|
|
||||||
part
|
|
||||||
where
|
|
||||||
p_partkey = ps_partkey
|
|
||||||
and p_brand <> 'Brand#15'
|
|
||||||
and p_type not like 'MEDIUM BURNISHED%'
|
|
||||||
and p_size in (39, 26, 18, 45, 19, 1, 3, 9)
|
|
||||||
and ps_suppkey not in (
|
|
||||||
select
|
|
||||||
s_suppkey
|
|
||||||
from
|
|
||||||
supplier
|
|
||||||
where
|
|
||||||
s_comment like '%Customer%Complaints%'
|
|
||||||
)
|
|
||||||
group by
|
|
||||||
p_brand,
|
|
||||||
p_type,
|
|
||||||
p_size
|
|
||||||
order by
|
|
||||||
supplier_cnt desc,
|
|
||||||
p_brand,
|
|
||||||
p_type,
|
|
||||||
p_size;
|
|
||||||
|
|
||||||
-- q17
|
|
||||||
|
|
||||||
select
|
|
||||||
sum(l_extendedprice) / 7.0 as avg_yearly
|
|
||||||
from
|
|
||||||
lineitem,
|
|
||||||
part
|
|
||||||
where
|
|
||||||
p_partkey = l_partkey
|
|
||||||
and p_brand = 'Brand#52'
|
|
||||||
and p_container = 'JUMBO CAN'
|
|
||||||
and l_quantity < (
|
|
||||||
select
|
|
||||||
0.2 * avg(l_quantity)
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_partkey = p_partkey
|
|
||||||
);
|
|
||||||
|
|
||||||
-- q18
|
|
||||||
select
|
|
||||||
c_name,
|
|
||||||
c_custkey,
|
|
||||||
o_orderkey,
|
|
||||||
o_orderdate,
|
|
||||||
o_totalprice,
|
|
||||||
sum(l_quantity)
|
|
||||||
from
|
|
||||||
customer,
|
|
||||||
orders,
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
o_orderkey in (
|
|
||||||
select
|
|
||||||
l_orderkey
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
group by
|
|
||||||
l_orderkey having
|
|
||||||
sum(l_quantity) > 313
|
|
||||||
)
|
|
||||||
and c_custkey = o_custkey
|
|
||||||
and o_orderkey = l_orderkey
|
|
||||||
group by
|
|
||||||
c_name,
|
|
||||||
c_custkey,
|
|
||||||
o_orderkey,
|
|
||||||
o_orderdate,
|
|
||||||
o_totalprice
|
|
||||||
order by
|
|
||||||
o_totalprice desc,
|
|
||||||
o_orderdate
|
|
||||||
limit 100;
|
|
||||||
|
|
||||||
-- q19
|
|
||||||
select
|
|
||||||
sum(l_extendedprice* (1 - l_discount)) as revenue
|
|
||||||
from
|
|
||||||
lineitem,
|
|
||||||
part
|
|
||||||
where
|
|
||||||
(
|
|
||||||
p_partkey = l_partkey
|
|
||||||
and p_brand = 'Brand#43'
|
|
||||||
and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
|
|
||||||
and l_quantity >= 3 and l_quantity <= 3 + 10
|
|
||||||
and p_size between 1 and 5
|
|
||||||
and l_shipmode in ('AIR', 'AIR REG')
|
|
||||||
and l_shipinstruct = 'DELIVER IN PERSON'
|
|
||||||
)
|
|
||||||
or
|
|
||||||
(
|
|
||||||
p_partkey = l_partkey
|
|
||||||
and p_brand = 'Brand#25'
|
|
||||||
and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')
|
|
||||||
and l_quantity >= 10 and l_quantity <= 10 + 10
|
|
||||||
and p_size between 1 and 10
|
|
||||||
and l_shipmode in ('AIR', 'AIR REG')
|
|
||||||
and l_shipinstruct = 'DELIVER IN PERSON'
|
|
||||||
)
|
|
||||||
or
|
|
||||||
(
|
|
||||||
p_partkey = l_partkey
|
|
||||||
and p_brand = 'Brand#24'
|
|
||||||
and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
|
|
||||||
and l_quantity >= 22 and l_quantity <= 22 + 10
|
|
||||||
and p_size between 1 and 15
|
|
||||||
and l_shipmode in ('AIR', 'AIR REG')
|
|
||||||
and l_shipinstruct = 'DELIVER IN PERSON'
|
|
||||||
);
|
|
||||||
|
|
||||||
-- q20
|
|
||||||
select
|
|
||||||
s_name,
|
|
||||||
s_address
|
|
||||||
from
|
|
||||||
supplier,
|
|
||||||
nation
|
|
||||||
where
|
|
||||||
s_suppkey in (
|
|
||||||
select
|
|
||||||
ps_suppkey
|
|
||||||
from
|
|
||||||
partsupp
|
|
||||||
where
|
|
||||||
ps_partkey in (
|
|
||||||
select
|
|
||||||
p_partkey
|
|
||||||
from
|
|
||||||
part
|
|
||||||
where
|
|
||||||
p_name like 'lime%'
|
|
||||||
)
|
|
||||||
and ps_availqty > (
|
|
||||||
select
|
|
||||||
0.5 * sum(l_quantity)
|
|
||||||
from
|
|
||||||
lineitem
|
|
||||||
where
|
|
||||||
l_partkey = ps_partkey
|
|
||||||
and l_suppkey = ps_suppkey
|
|
||||||
and l_shipdate >= date '1994-01-01'
|
|
||||||
and l_shipdate < date '1994-01-01' + interval '1' year
|
|
||||||
)
|
|
||||||
)
|
|
||||||
and s_nationkey = n_nationkey
|
|
||||||
and n_name = 'VIETNAM'
|
|
||||||
order by
|
|
||||||
s_name;
|
|
||||||
|
|
||||||
-- 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 = 'INDIA'
|
|
||||||
group by
|
|
||||||
s_name
|
|
||||||
order by
|
|
||||||
numwait desc,
|
|
||||||
s_name
|
|
||||||
limit 100;
|
|
||||||
|
|
||||||
-- q22
|
|
||||||
|
|
||||||
select
|
|
||||||
cntrycode,
|
|
||||||
count(*) as numcust,
|
|
||||||
sum(c_acctbal) as totacctbal
|
|
||||||
from
|
|
||||||
(
|
|
||||||
select
|
|
||||||
substring(c_phone from 1 for 2) as cntrycode,
|
|
||||||
c_acctbal
|
|
||||||
from
|
|
||||||
customer
|
|
||||||
where
|
|
||||||
substring(c_phone from 1 for 2) in
|
|
||||||
('41', '28', '39', '21', '24', '29', '44')
|
|
||||||
and c_acctbal > (
|
|
||||||
select
|
|
||||||
avg(c_acctbal)
|
|
||||||
from
|
|
||||||
customer
|
|
||||||
where
|
|
||||||
c_acctbal > 0.00
|
|
||||||
and substring(c_phone from 1 for 2) in
|
|
||||||
('41', '28', '39', '21', '24', '29', '44')
|
|
||||||
)
|
|
||||||
and not exists (
|
|
||||||
select
|
|
||||||
*
|
|
||||||
from
|
|
||||||
orders
|
|
||||||
where
|
|
||||||
o_custkey = c_custkey
|
|
||||||
)
|
|
||||||
) as custsale
|
|
||||||
group by
|
|
||||||
cntrycode
|
|
||||||
order by
|
|
||||||
cntrycode;
|
|
Loading…
Reference in a new issue