Q13è¯å¥æŸ¥è¯¢èŽ·å¾—æ¶ˆè´¹è€…çš„è®¢å•æ•°é‡ï¼ŒåŒ…括过去和现在都没有订å•记录的消费者。
Q13è¯å¥çš„ç‰¹ç‚¹æ˜¯ï¼šå¸¦æœ‰åˆ†ç»„ã€æŽ’åºã€èšé›†ã€å查询ã€å·¦å¤–连接æ“作并å˜çš„æŸ¥è¯¢æ“作。
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]%’ //LIKEæ“作
//WORD1 为以下四个å¯èƒ½å€¼ä¸ä»»æ„一个:specialã€pendingã€unusualã€express
//WORD2 为以下四个å¯èƒ½å€¼ä¸ä»»æ„一个:packagesã€requestsã€accountsã€deposits
group by //åæŸ¥è¯¢ä¸çš„分组æ“作
c_custkey
)as c_orders (c_custkey, c_count)
group by //分组æ“作
c_count
order by //æŽ’åºæ“作
custdist desc, //从大到å°é™åºæŽ’åº
c_count desc;
TPC-Hæ ‡å‡†å®šä¹‰äº†Q13è¯å¥ç‰ä»·çš„å˜å½¢SQL,与上述查询è¯å¥æ ¼å¼ä¸Šä¸ç›¸åŒï¼Œä¸Šè¿°è¯å¥ä½¿ç”¨å查询作为查询的对象,å˜å½¢çš„SQLæŠŠåæŸ¥è¯¢éƒ¨åˆ†å˜ä¸ºè§†å›¾ï¼Œç„¶åŽåŸºäºŽè§†å›¾åšæŸ¥è¯¢ï¼Œè¿™ç§åšæ³•çš„æ„义在于有些数æ®åº“䏿”¯æŒå¦‚ä¸Šè¯æ³•,但å˜åœ¨ç‰ä»·çš„å…¶ä»–è¯æ³•,如MySQL就䏿”¯æŒå¦‚ä¸Šè¯æ³•,需è¦ä½¿ç”¨å¦‚下ç‰ä»·å½¢å¼ã€‚
create view orders_per_cust:s (custkey, ordercount) as //åˆ›å»ºè§†å›¾ï¼Œç›¸å½“ä¸Žæ ‡å‡†Q13çš„åæŸ¥è¯¢å†…容
select
c_custkey,
count(o_orderkey)
from
customer left outer join orders on
c_custkey = o_custkey
and o_comment not like '%:1%:2%'
group by
c_custkey;
select
ordercount,
count(*) as custdist
from
orders_per_cust:s //对视图进行查询
group by
ordercount
order by
custdist desc,
ordercount desc;
drop view orders_per_cust:s;
Q14è¯å¥æŸ¥è¯¢èŽ·å¾—æŸä¸€ä¸ªæœˆçš„æ”¶å…¥ä¸æœ‰å¤šå¤§çš„百分比是æ¥è‡ªä¿ƒé”€é›¶ä»¶ã€‚用以监视促销带æ¥çš„市场å应。
Q14è¯å¥çš„ç‰¹ç‚¹æ˜¯ï¼šå¸¦æœ‰åˆ†ç»„ã€æŽ’åºã€èšé›†ã€å查询ã€å·¦å¤–连接æ“作并å˜çš„æŸ¥è¯¢æ“作。
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 '[DATE]' // DATE是从1993年到1997å¹´ä¸ä»»ä¸€å¹´çš„任一月的一å·
and l_shipdate < date '[DATE]' + interval '1' month;
TPC-Hæ ‡å‡†å®šä¹‰äº†Q14è¯å¥ç‰ä»·çš„å˜å½¢SQL,与上述查询è¯å¥æ ¼å¼ä¸ŠåŸºæœ¬ç›¸åŒï¼Œä¸»è¦æ˜¯ç›®æ ‡åˆ—使用了ä¸åŒçš„表达方å¼ï¼Œåœ¨æ¤ä¸å†èµ˜è¿°ã€‚
Q15,头ç‰ä¾›è´§å•†æŸ¥è¯¢Q15è¯å¥æŸ¥è¯¢èŽ·å¾—æŸæ®µæ—¶é—´å†…为总收入贡献最多的供货商(排å第一)的信æ¯ã€‚å¯ç”¨ä»¥å†³å®šå¯¹å“ªäº›å¤´ç‰ä¾›è´§å•†ç»™äºˆå¥–励ã€ç»™äºˆæ›´å¤šè®¢å•ã€ç»™äºˆç‰¹åˆ«è®¤è¯ã€ç»™äºˆé¼“èˆžç‰æ¿€åŠ±ã€‚
Q15è¯å¥çš„特点是:带有分排åºã€èšé›†ã€èšé›†å查询æ“作并å˜çš„æ™®é€šè¡¨ä¸Žè§†å›¾çš„连接æ“作。
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]' //DATE 是从1993年一月到1997å¹´åæœˆä¸ä»»ä¸€æœˆçš„一å·
and l_shipdate < date '[DATE]' + interval '3' month //3个月内
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];
TPC-Hæ ‡å‡†å®šä¹‰äº†Q15è¯å¥ç‰ä»·çš„å˜å½¢SQL,与上述查询è¯å¥æ ¼å¼ä¸Šä¸ç›¸åŒï¼Œä¸Šè¿°æŸ¥è¯¢è¯å¥é¦–先定义了视图,然åŽç”¨è¡¨ä¸Žè§†å›¾è¿žæŽ¥ï¼›å˜å½¢çš„SQL定了WITHè¯å¥ï¼Œç„¶åŽç”¨WITH的对象与表进行连接。å˜å½¢SQLçš„è¯å¥å¦‚下:
WITH revenue (supplier_no, total_revenue) as (
SELECT
l_suppkey,
SUM(l_extendedprice * (1-l_discount))
FROM
lineitem
WHERE
l_shipdate >= date ':1'
AND l_shipdate < date ':1' + interval '3' month
GROUP BY
l_suppkey
)
SELECT
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
FROM
supplier,
revenue
WHERE
s_suppkey = supplier_no
AND total_revenue = (
SELECT
MAX(total_revenue)
FROM
revenue
)
ORDER BY
s_suppkey;
PlanetMySQL Voting: Vote UP / Vote DOWN