Skip to content
This repository was archived by the owner on Mar 21, 2021. It is now read-only.

Commit 44d11c3

Browse files
committed
TPC-H: gardening
1 parent 78b0228 commit 44d11c3

File tree

1 file changed

+58
-35
lines changed

1 file changed

+58
-35
lines changed

tests/TPC-H.rst

Lines changed: 58 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -550,21 +550,30 @@ SQL::
550550
... """)
551551

552552
>>> q_volume = q.extendedprice * (1 - q.discount)
553+
>>> q_revenue = q_volume.sum()
553554

554-
>>> got = (
555-
... q.lineitem
556-
... .filter((q.partsupp.part.type == 'ECONOMY ANODIZED STEEL') &
557-
... (q.order.customer.nation.region.name == 'AMERICA') &
558-
... (q.order.orderdate >= date(1995, 1, 1)) &
559-
... (q.order.orderdate <= date(1996, 12, 31)))
560-
... .group(year=q.order.orderdate.year)
561-
... .select(
562-
... year=q.year,
563-
... mkt_share=
564-
... (q._.filter(q.partsupp.supplier.nation.name == 'CANADA') >> q_volume).sum() /
565-
... (q._ >> q_volume).sum()
555+
>>> q_nation_market_share = lambda market_region, supp_nation, q_part, start, end: (
556+
... q.lineitem
557+
... .filter((q.partsupp.part >> q_part) &
558+
... (q.order.customer.nation.region.name == market_region) &
559+
... (q.order.orderdate >= start) &
560+
... (q.order.orderdate <= end))
561+
... .group(year=q.order.orderdate.year)
562+
... .select(
563+
... year=q.year,
564+
... mkt_share=
565+
... (q._ >> q.filter(q.partsupp.supplier.nation.name == supp_nation) >> q_revenue) /
566+
... (q._ >> q_revenue)
567+
... )
566568
... )
567-
... .run())
569+
570+
>>> got = q_nation_market_share(
571+
... market_region='AMERICA',
572+
... supp_nation='CANADA',
573+
... start=date(1995, 1, 1),
574+
... end=date(1996, 12, 31),
575+
... q_part=q.type == 'ECONOMY ANODIZED STEEL',
576+
... ).run()
568577

569578
>>> got == expected
570579
True
@@ -613,12 +622,10 @@ Product Type Profit Measure Query (Q9)
613622

614623
::
615624

616-
>>> q_amount = (
617-
... q.extendedprice * (1 - q.discount) -
618-
... q.partsupp.supplycost * q.quantity
619-
... )
625+
>>> q_volume = q.extendedprice * (1 - q.discount)
626+
>>> q_amount = q_volume - q.partsupp.supplycost * q.quantity
627+
>>> q_sum_profit = q_amount.sum()
620628

621-
::
622629

623630
>>> got = (
624631
... q.lineitem
@@ -631,7 +638,7 @@ Product Type Profit Measure Query (Q9)
631638
... .select(
632639
... nation=q.nation,
633640
... year=q.year,
634-
... sum_profit=q._ >> q_amount >> q.sum()
641+
... sum_profit=q._ >> q_sum_profit
635642
... )
636643
... ).run()
637644

@@ -690,6 +697,8 @@ Returned Item Reporting Query (Q10)
690697
... limit 20
691698
... """)
692699

700+
Returned items::
701+
693702
>>> q_returned = (
694703
... q.order
695704
... .filter((q.orderdate >= date(1993, 10, 1)) &
@@ -698,12 +707,16 @@ Returned Item Reporting Query (Q10)
698707
... .filter(q.returnflag == "R")
699708
... )
700709

710+
>>> q_volume = q.extendedprice * (1 - q.discount)
711+
>>> q_revenue = q_volume.sum()
712+
>>> q_returned_revenue = q_returned >> q_revenue
713+
701714
>>> got = (
702715
... q.customer
703716
... .select(
704717
... id=q.id,
705718
... name=q.name,
706-
... revenue=q_returned >> (q.extendedprice * (1 - q.discount)) >> q.sum(),
719+
... revenue=q_returned_revenue,
707720
... acctbal=q.acctbal,
708721
... nation=q.nation.name,
709722
... address=q.address,
@@ -919,18 +932,20 @@ Promotion Effect Query (Q14)
919932
... and l.shipdate < date '1995-10-01'
920933
... """)
921934

922-
::
935+
Volume and revenue, total and promo-related::
923936

924937
>>> q_volume = q.extendedprice * (1 - q.discount)
938+
>>> q_revenue = q_volume.sum()
939+
>>> q_promo_revenue = q.filter(q.partsupp.part.type.like('PROMO%')) >> q_revenue
940+
941+
Compute promotion effect::
925942

926943
>>> got = (
927944
... q.lineitem
928-
... .filter((q.shipdate >= date(1995, 9, 1)) & (q.shipdate < date(1995, 10, 1)))
929-
... .group() >> (
930-
... 100 *
931-
... (q._.filter(q.partsupp.part.type.like('PROMO%')) >> q_volume >> q.sum()) /
932-
... (q._ >> q_volume >> q.sum())
933-
... )
945+
... .filter(q.shipdate >= date(1995, 9, 1))
946+
... .filter(q.shipdate < date(1995, 10, 1))
947+
... .group()
948+
... >> (100 * (q._ >> q_promo_revenue) / (q._ >> q_revenue))
934949
... ).run()
935950

936951
>>> got == expected[0]['promo_revenue']
@@ -979,25 +994,33 @@ Top Supplier Query (Q15)
979994
... s.id;
980995
... """)
981996

982-
::
997+
Volume::
983998

984-
>>> q_total_revenue = (
985-
... q.partsupp.lineitem
986-
... .filter((q.shipdate >= date(1996, 1, 1)) & (q.shipdate < date(1996, 4, 1)))
987-
... >> (q.extendedprice * (1 - q.discount))
988-
... >> q.sum()
999+
>>> q_volume = q.extendedprice * (1 - q.discount)
1000+
1001+
Total supplier revenue from ``start`` till ``end`` dates::
1002+
1003+
>>> q_total_revenue = lambda start, end: (
1004+
... q.partsupp
1005+
... .lineitem
1006+
... .filter(q.shipdate >= start)
1007+
... .filter(q.shipdate < end)
1008+
... >> q_volume.sum()
9891009
... )
9901010

1011+
Compute top supplier by total revenue for specified dates::
1012+
9911013
>>> got = (
9921014
... q.supplier
9931015
... .select(
9941016
... id=q.id,
9951017
... name=q.name,
9961018
... address=q.address,
9971019
... phone=q.phone,
998-
... total_revenue=q_total_revenue,
1020+
... total_revenue=q_total_revenue(start=date(1996, 1, 1), end=date(1996, 4, 1)),
9991021
... )
1000-
... .filter(q.total_revenue == (q.around() >> q.total_revenue >> q.max()))
1022+
... .filter(q.total_revenue == q.around().total_revenue.max())
1023+
... .sort(q.id)
10011024
... ).run()
10021025

10031026
>>> got == expected

0 commit comments

Comments
 (0)