TPC-H(二):22个SQL语句说明(基于TPC-H2.17.3版本)

Q01 统计查询
Q02 WHERE条件中,使用子查询(=)
Q03 多表关联统计查询,并统计(SUM)
Q04 WHERE条件中,使用子查询(EXISTS),并统计(COUNT)
Q05 多表关联查询(=),并统计(SUM)
Q06 条件(BETWEEN AND)查询,并统计(SUM)
Q07 带有FROM子查询,从结果集中统计(SUM)
Q08 带有FROM多表子查询,从结果集中的查询列上带有逻辑判断(WHEN THEN ELSE)的统计(SUM)
Q09 带有FROM多表子查询,查询表中使用函数(EXTRACT),从结果集中统计(SUM)
Q10 多表条件查询(>=, <),并统计(SUM)
Q11 在GROUP BY中使用比较条件(HAVING >),比较值从子查询中查出
Q12 带有逻辑判断(WHEN AND/ WHEN OR)的查询,并统计(SUM)
Q13 带有FROM子查询,子查询中使用外联结
Q14 使用逻辑判断(WHEN ELSE)的查询
Q15 使用视图和表关联查询
Q16 在WHERE子句中使用子查询,使用IN/ NOT IN判断条件,并统计(COUNT)
Q17 在WHERE子句中使用子查询,使用<比较,使用了AVG函数
Q18 在WHERE子句中使用IN条件从子查询结果中比较
Q19 多条件比较查询
Q20 WHERE条件子查询(三层)
Q21 在WHERE条件中使用子查询,使用EXISTS和NOT EXISTS判断
Q22 在WHERE条件中使用判断子查询、IN、NOT EXISTS,并统计(SUM、COUNT)查询结果

价格摘要报告查询(Q1)

这个查询报告已经付款的、已运送的和返回的生意的数量。

商业问题

价格摘要报告查询提供了给定日期的运送的所有行的价格摘要报告,这个日期在数据库包含的最大的运送日期的60-120天以内。查询列出了扩展价格、打折的扩展价格、打折的扩展价格加税收、平均数量、平均扩展价格和平均折扣的总和。这些统计值根据RETURNFLAG 和LINESTATUS进行分组,并按照RETURNFLAG 和LINESTATUS的升序排列。每一组都给出所包含的行数。

查询函数定义
 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 '[DELTA]' day (3)
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus;
替代参数

DELTA在区间[60, 120]内随机选择。

注释:1998-12-01是数据库中定义的最大的最可能的运送日期。这个查询将包括这个日期减去DELTA天得到的日期之前的所有被运送的行。目的是选择DELTA的值以便表中95%到97%的行被扫描。


最小代价供应者查询(Q2)

这个查询给出在给定的区域内,对于指定的零件,应该选择哪个供应者来订货。

商业问题

最小代价供应者查询给出这一答案:在给定的区域内,对于某一类型和大小的零件,哪个供应者能以最低的价格供应它。如果那一区域的几个供应者以同样的价格供应所要求的零件,查询列出帐户余额在前100位的供应者。对于每一个供应者,查询列出供应者的帐户余额、名字和国家,零件的号码和生产者,供应者的地址、电话号码和备注信息。

查询函数定义

返回前100行

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 = [ SIZE ]
AND p_type LIKE '%[TYPE]'
AND s_nationkey = n_nationkey
AND n_regionkey = r_regionkey
AND r_name = '[REGION]'
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 = '[REGION]'
)
ORDER BY
    s_acctbal DESC,
    n_name,
    s_name,
    p_partkey;
替代参数
  1. SIZE在区间[1, 50]内随机选择;
  2. TYPE列表Syllable 3 中随机选择;
  3. REGION在R_NAME定义的值的列表中随机选择。

e.g:
1. SIZE = 15;
2. TYPE = BRASS;
3. REGION = EUROPE.


运送优先权查询(Q3)

查询给出收入在前10位的尚未运送的订单。

商业问题

运送优先权查询给出在指定的日期之前尚未运送的订单中具有最大收入的订单的优先权和潜在的收入,潜在的收入被定义为l_extendedprice * (1-l_discount)的和。订单按照收入的降序列出。如果尚未运送的订单超过10个,只有收入在前10位的订单被列出。

查询函数定义
 SELECT
    l_orderkey,
    SUM (
        l_extendedprice * (1 - l_discount)
    ) AS revenue,
    o_orderdate,
    o_shippriority
FROM
    customer,
    orders,
    lineitem
WHERE
    c_mktsegment = '[SEGMENT]'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '[DATE]'
AND l_shipdate > DATE '[DATE]'
GROUP BY
    l_orderkey,
    o_orderdate,
    o_shippriority
ORDER BY
    revenue DESC,
    o_orderdate;
替代参数

1. SEGNENT在Segment定义的值的列表中随机选择;
2. 日期在[1995-03-01, 1995-03-31]中随机选择。


订单优先权检查查询(Q4)

这个查询可以让我们了解订单优先权系统工作得如何,并给出顾客满意度的一个估计值。

商业问题

订单优先权检查查询计算给定的某一年的某一季度的订单的数量,在每个订单中至少有一行由顾客在它的提交日期之后收到。查询按照优先权的升序列出每一优先权的订单的数量。

查询函数定义
 SELECT
    o_orderpriority,
    COUNT (*) AS order_count
FROM
    orders
WHERE
    o_orderdate >= DATE '[DATE]'
AND o_orderdate < DATE '[DATE]' + 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;
替代参数

DATE是在1993年1月和1997年10月之间随机选择的一个月的第一天。


当地供应者数量查询(Q5)

这个查询列出通过本地供应者获得的收入大小。

商业问题

当地供应者数量查询给出某一国家的某一地区的收入,这些收入是通过那些定购零件的顾客和供应零件的供应者都在那个国家的交易获得的。运行这个查询是为了决定在给定的区域是否需要建立一个当地分配中心。这个查询仅仅考虑在给定的一年中定购的零件。这个查询按照收入的降序显示出国家和收入大小。某一国家的收入大小被定义为sum(l_extendedprice * (1 -l_discount))。

查询函数定义
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 = ':1'
    and o_orderdate >= date ':2'
    and o_orderdate < date ':2' + interval '1' year
group by
    n_name
order by
    revenue desc;
替代参数
  1. REGION在为R_NAME定义的值的列表中随机选择;
  2. DATE是从1993年到1997年中随机选择的一年的1月1日。

    e.g:

  3. REGION = ASIA;
  4. DATE = 1994-01-01

预测收入变化查询(Q6)

这个查询确定收入增加的数量,这些增加的收入是在给定的一年中在指定的百分比范围内消除了折扣产生的。这类”what if”查询可以被用来寻找增加收入的途径。

商业问题

预测收入变化查询考虑了指定的一年中折扣在DISCOUNT-0.01和DISCOUNT+0.01之间的已运送的所有订单。查询列出了把l_quantity小于quantity的订单的折扣消除之后总收入增加的数量。潜在的收入增加量等于具有合理的折扣和数量的订单的[l_extendedprice * l_discount]的总和。

查询函数定义
select
sum(l_extendedprice*l_discount) as revenue
from 
lineitem
where 
l_shipdate >= date '[DATE]'
and l_shipdate < date '[DATE]' + interval '1' year
and l_discount between [DISCOUNT] - 0.01 and [DISCOUNT] + 0.01
and l_quantity < [QUANTITY];


替代参数

1. DATE是从[1993, 1997]中随机选择的一年的1月1日;
2. DISCOUNT在区间[0.02, 0.09]中随机选择;
3. QUANTITY在区间[24, 25]中随机选择。

e.g
1. DATE = 1994-01-01;
2. DISCOUNT = 0.06;
3. QUANTITY = 24


货运量查询(Q7)

此查询确定在两国之间货运商品的量以帮助重新谈判货运合同。

商业问题

此查询得到在1995年和1996年间,零件从一国供应商被运送给另一国的顾客,两国货运项目总的折扣收入。查询结果列出供应商国家,顾客国家,年度,那一年的货运收入,并按供应商国家,顾客国家和年度升序排列。

查询函数定义
 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 = '[NATION1]' and n2.n_name = '[NATION2]')
or (n1.n_name = '[NATION2]' and n2.n_name = '[NATION1]')
)
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;
替代函数

1. NATION1 是在N¬_NAME值的列表中的任意值;

2. NATION2 是在N¬_NAME值的列表中的任意值,且必须和条1中NATION1的值不同。

e.g

NATION1=FRANCE;
NATION2=GERMANY。


国家市场份额查询(Q8)

此查询显示在过去的两年中,一个给定零件类型在某国某地区市场份额改变了多少。

商业问题

某国某地区的市场份额定义为某国某地区供应商供应的特定种类的产品收入的百分比,是[l_extendedprice *(1-ldiscount)]的和。这个查询决定1995年和1996年的市场份额。

查询函数定义
select
o_year, 
sum(case 
when nation = '[NATION]' 
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 = '[REGION]'
and s_nationkey = n2.n_nationkey
and o_orderdate between date '1995-01-01' and date '1996-12-31'
and p_type = '[TYPE]' 
) as all_nations
group by 
o_year
order by 
o_year;
替代参数

1. NATION是在N_NAME的值的列表中的任意值。
2. REGION是在R_NAME定义的值,R_RGIONKEY和N_REGIONKEY在那里为选中的条1的NATION协调。
3. TYPE是在三音节字符串列表中的任意值。

e.g :
1. NATION=BRAZIL;
2. REGION=AMERICA;
3. TYPE=ECONOMY ANODIZED STEEL


产品类型利润估量查询(Q9)

此查询决定一个给定零件在一个国家和年度的利润。

商业问题

此查询得出每个国家每一年所有被定购的零件在那一年中利润。利润定义为在特别行所有被描述零件的[(_extendedprice*(1-l_discount))-(ps_supplycost *l_quantity)]之和。查询结果按国家的字母顺序升序排列,每一个国家中按年度和利润按年度的降序排列(最近的年在最前)。

查询函数定义
 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 '%[COLOR]%'
) as profit
group by 
nation, 
o_year
order by 
nation, 
o_year desc;

##### 替代参数
1. COLOR为生P_NAME的值的列表中的任意值
e.g
1. COLOR=green


返回项目报告查询(Q10)

此查询标记那些可能对货运给他们的零件有问题的顾客。

商业问题

此查询根据在一个季度中那些有返回零件的顾客中对收入产生影响,造成损失的前20名。这个查询只考虑在特定季度中定购的零件。查询结果列出顾客姓名,地址,国别,电话,帐册,意见信息和收入损失。按收入损失降序排列。收入损失定义为对所有具有资格的项目(1_extendedprice *(1-1_discount))和。

查询函数定义

返回前20个选中行。

 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 '[DATE]'
and o_orderdate < date '[DATE]' + 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;
替代参数

1.DATE是位于1993年一月到1994年十二月中任一月的一号。


重要库存标志查询(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 = '[NATION]'
group by 
ps_partkey having 
sum(ps_supplycost * ps_availqty) > (
select 
sum(ps_supplycost * ps_availqty) * [FRACTION]
from 
partsupp, 
supplier, 
nation
where 
ps_suppkey = s_suppkey
and s_nationkey = n_nationkey
and n_name = '[NATION]'
)
order by
value desc;
替代参数
  1. NATION 是在N¬_NAME值的列表中的任意值
  2. FRACTION为0.0001/SF

e.g
1. NATION=GERMANY;
2. FRACTION=0.0001


货运模式和命令优先查询(Q12)

这个查询决定选择现对便宜的货运模式是否会因为使消费者更多的在合同日期之后收到货物而对紧急优先命令产生负面影响。

商业问题

此查询得到顾客在某一年通过船运模式收到的项目,项目的数目属于在两个特别的船运模式下l_receiptdate超过l_commitdate的订单。只有在l_commitdate之前实际货运的项目才被考虑。迟的项目被分为两部分,一类优先级为URGENT,HIGH,另一类不是URGENT或HIGH。

查询函数定义
 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 ('[SHIPMODE1]', '[SHIPMODE2]')
and l_commitdate < l_receiptdate
and l_shipdate < l_commitdate
and l_receiptdate >= date '[DATE]'
and l_receiptdate < date '[DATE]' + interval '1' year
group by 
l_shipmode
order by 
l_shipmode;
替代参数

1 SHIPMODE1 是在Modes 值的列表中的任意值
2 SHIPMODE2 是在条款4. 2中定义Modes
值的列表中的任意值,且必须有别于SHIPMODE1
3 DATE 是从1993年到1997年中任一年的一月一号
e.g
1 SHIPMODE1=MAIL;
2 SHIPMODE2=SHIP;
3 DATE=1994-01-01;


消费者分配查询(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 ‘%[WORD1]%[WORD2]%’
group by 
c_custkey
)as c_orders (c_custkey, c_count)
group by 
c_count
order by 
custdist desc, 
c_count desc;
替代参数

1 WORD1 为以下四个可能值中任意一个:special , pending , unusual , express.
2 WORD2 为以下四个可能值中任意一个:packages , requests , accounts , deposits.
e.g
1 WORD1=special
2 WORD2=requests


促进效果查询(Q14)

此查询监视像TV广告或者特别活动一类的促销带来的市场反应。

商业问题

此查询决定某一特定时间的收入中有多大的百分比是来自促销零件。查询只是给出百分数。收入定义为(1¬_extendedprice*(1-1_discount))。

查询函数定义
 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 '[DATE]'
and l_shipdate < date '[DATE]' + interval '1' month;
替代参数

1 DATE是从1993年到1997年中任一年的任一月的一号。


最高贡献供应商(Q15)

此查询决定头等供应商以便给予奖励,给予更多订单,或是给予特别认证。

商业问题

此查询找到在一季度或一年内能为总收入贡献最多的供应商。若持平,则按供应商号排列。

查询函数定义
create view revenue[STREAM_ID] (supplier_no, total_revenue) as
select 
l_suppkey, 
sum(l_extendedprice * (1 - l_discount))
from 
lineitem
where 
l_shipdate >= date '[DATE]'
and l_shipdate < date '[DATE]' + interval '3' month
group by 
l_suppkey;
select
s_suppkey, 
s_name, 
s_address, 
s_phone, 
total_revenue
from 
supplier, 
revenue[STREAM_ID]
where 
s_suppkey = supplier_no
and total_revenue = (
select 
max(total_revenue)
from 
revenue[STREAM_ID]
)
order by 
s_suppkey;
drop view revenue[STREAM_ID];
替代参数

1 DATE 是从1993年一月到1997年十月中任一月的一号。


零件/供应商关系查询(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]'
and p_type not like '[TYPE]%'
and p_size in ([SIZE1], [SIZE2], [SIZE3], [SIZE4], [SIZE5], [SIZE6], [SIZE7], [SIZE8])
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;
替代参数
  1. BRAND=Brand#MN ,M和N是两个字母,代表两个数值,相互独立,取值在1到5之间。
  2. TYPE由任意三音节字符串的前两个音节构成。
  3. SIZE在1到50之间任意选择的一组八个不同的值。

e.g
1. BRAND=Brand#45
1. TYPE=MEDIUM PLLISHED
1. SIZE1=49
1. SIZE 4
1. SIZE3=23
1. SIZE4=45
1. SIZE5=19
1. SIZE6=3
1. SIZE7=36
1. SIZE8=9


小量订单收入查询(Q17)

此查询计算出如果没有没有小量订单,平均年收入将损失多少。由于大量商品的货运,这将降低管理费用。

商业问题

此查询考虑零件给定品牌和给定包装类型,决定在一个七年数据库的所有订单中这些订单零件的平均项目数量(过去的和未决的)。如果这些零件中少于平均数20%的订单不再被接纳,那平均一年会损失多少呢?

查询函数定义
select
sum(l_extendedprice) / 7.0 as avg_yearly
from 
lineitem, 
part
where 
p_partkey = l_partkey
and p_brand = '[BRAND]'
and p_container = '[CONTAINER]'
and l_quantity < (
select
0.2 * avg(l_quantity)
from 
lineitem
where 
l_partkey = p_partkey
);
替代参数

1. BRAND=’Brand#MN’ ,M和N是两个字母,代表两个数值,相互独立,取值在1到5之间。
2. CONTAINER 是在Containers定义的双音节字符串列表中的任意取值。
e.g
1. BRAND=Brand#23;
2. CONTAINER=MED BOX。


大订单顾客查询(Q18)

此查询根据已下的大数量订单来给顾客排序。大数量订单定义为总数量超过某一特定的水平的订单。

商业问题

此查询找到曾下过大数量订单的前100位顾客。查询结果列出顾客的姓名,顾客号,订单号,日期和总价值以及订单的数量。

查询函数定义

返回前100行。

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) > [QUANTITY]
)
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;
替代参数

1. QUANTITY是位于300-315 之间的任意值。


折扣收入查询(Q19)

此查询显示对以特定方式处理的选定品牌进行销售的总的折扣收入。这个查询是用数据挖掘工具产生格式化代码的一个例子。

商业问题

此查询得到对一些空运或人工运输零件三个不同种类所有订单的总折扣收入。这些零件的选择要综合考虑特定品牌,包装和尺寸范围。

查询函数定义
select
sum(l_extendedprice * (1 - l_discount) ) as revenue
from 
lineitem, 
part
where 
(
p_partkey = l_partkey
and p_brand = ‘[BRAND1]’
and p_container in ( ‘SM CASE’, ‘SM BOX’, ‘SM PACK’, ‘SM PKG’) 
and l_quantity >= [QUANTITY1] and l_quantity <= [QUANTITY1] + 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 = ‘[BRAND2]’
and p_container in (‘MED BAG’, ‘MED BOX’, ‘MED PKG’, ‘MED PACK’)
and l_quantity >= [QUANTITY2] and l_quantity <= [QUANTITY2] + 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 = ‘[BRAND3]’
and p_container in ( ‘LG CASE’, ‘LG BOX’, ‘LG PACK’, ‘LG PKG’)
and l_quantity >= [QUANTITY3] and l_quantity <= [QUANTITY3] + 10
and p_size between 1 and 15
and l_shipmode in (‘AIR’, ‘AIR REG’)
and l_shipinstruct = ‘DELIVER IN PERSON’
);
替代参数

1. QUANTITY1 是1到10之间的任意取值。
2. QUANTITY2 是10到20之间的任意取值。
3. QUANTITY3 是20到30之间的任意取值。
4. BRAND1 ,BRAND2 ,BRAND3=‘Brand#MN’,M和N是两个字母,代表两个数值,相互独立,取值在1到5之间。
e.g
1. QUANTITY 1=1
2. QUANTITY 0
3. QUANTITY3=20
4. BRAND1=Brand#12
5. BRAND2=Brand#23
6. BRAND3=Brand#34


潜在零件促进查询(Q20)

此查询确定在某一国能对某一零件商品提供更有竞争力价格的供应商。

商业问题

此查询确定那些对得到零件有过剩的供应商,超过供应商在某一年中货运给给定国的某一零件的50%则为过剩。只考虑符合一定命名习惯的零件。

查询函数定义
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 '[COLOR]%'
)
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('[DATE]’)
and l_shipdate < date('[DATE]’) + interval1year 
)
)
and s_nationkey = n_nationkey
and n_name = '[NATION]'
order by 
s_name;
替代参数

1. COLOR为产生P_NAME的值的列表中的任意值
2. DATE为在1993年至1997年的任一年的一月一号
3. NATION为在N_NAME的值的列表中的任意值
e.g
1. COLOR=forest
2. DATE=1994-01-01
3. NATION=CANADA


不能按时交货供应商查询(Q21)

此查询确定不能及时货运所需零件的供应商。

商业问题

此查询确定给定国其产品是多种供应订单一部分(当前状态‘F’),但不能在正常日期交付的供应商名单。

查询函数定义
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 = '[NATION]'
group by 
s_name
order by 
numwait desc, 
s_name;
替代参数

1. NATION为在N_NAME的值的列表中的任意值
e.g
1. NATION=SAUDI ARABIA


全球销售机会查询(Q22)

此查询确定消费者可能购买的地理分布。

商业问题

此查询计算在国家代码特定的范围之内,比平均水平更持肯定态度但还没下七年订单的消费者数量。此查询也反应一般人的态度。国家代码是c¬_phone的前两个字母。

查询函数定义
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 
('[I1]','[I2]’,'[I3]','[I4]','[I5]','[I6]','[I7]')
and c_acctbal > (
select 
avg(c_acctbal)
from 
customer
where 
c_acctbal > 0.00
and substring (c_phone from 1 for 2) in
('[I1]','[I2]','[I3]','[I4]','[I5]','[I6]','[I7]')
)
and not exists (
select 
* 
from 
orders
where 
o_custkey = c_custkey
)
) as custsale
group by 
cntrycode 
order by 
cntrycode;
替代参数

1. I1…I7是在国家代码的可能值中不重复的任意值。
e.g:
1. I1=13
2. I2=14
3. I3=23
4. I4=29
5. I5=30
6. I6=18
7. I7=17

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页