github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/workload/tpcds/queries.go (about) 1 // Copyright 2019 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package tpcds 12 13 // NumQueries specifies the number of queries in TPC-DS benchmark. 14 const NumQueries = 99 15 16 // QueriesByNumber is a mapping from the number of a TPC-DS query to the actual 17 // query. Only queries that can be parsed by CockroachDB are present. 18 var QueriesByNumber = map[int]string{ 19 1: query1, 20 2: query2, 21 3: query3, 22 4: query4, 23 5: query5, 24 6: query6, 25 7: query7, 26 8: query8, 27 9: query9, 28 10: query10, 29 11: query11, 30 12: query12, 31 13: query13, 32 14: query14, 33 15: query15, 34 16: query16, 35 17: query17, 36 18: query18, 37 19: query19, 38 20: query20, 39 21: query21, 40 22: query22, 41 23: query23, 42 24: query24, 43 25: query25, 44 26: query26, 45 // TODO(yuzefovich): adjust the query. 46 //27: query27, 47 28: query28, 48 29: query29, 49 30: query30, 50 31: query31, 51 32: query32, 52 33: query33, 53 34: query34, 54 35: query35, 55 // TODO(yuzefovich): adjust the query. 56 //36: query36, 57 37: query37, 58 38: query38, 59 39: query39, 60 40: query40, 61 41: query41, 62 42: query42, 63 43: query43, 64 44: query44, 65 45: query45, 66 46: query46, 67 47: query47, 68 48: query48, 69 49: query49, 70 50: query50, 71 51: query51, 72 52: query52, 73 53: query53, 74 54: query54, 75 55: query55, 76 56: query56, 77 57: query57, 78 58: query58, 79 59: query59, 80 60: query60, 81 61: query61, 82 62: query62, 83 63: query63, 84 64: query64, 85 65: query65, 86 66: query66, 87 67: query67, 88 68: query68, 89 69: query69, 90 // TODO(yuzefovich): adjust the query. 91 //70: query70, 92 71: query71, 93 72: query72, 94 73: query73, 95 74: query74, 96 75: query75, 97 76: query76, 98 77: query77, 99 78: query78, 100 79: query79, 101 80: query80, 102 81: query81, 103 82: query82, 104 83: query83, 105 84: query84, 106 85: query85, 107 // TODO(yuzefovich): adjust the query. 108 //86: query86, 109 87: query87, 110 88: query88, 111 89: query89, 112 90: query90, 113 91: query91, 114 92: query92, 115 93: query93, 116 94: query94, 117 95: query95, 118 96: query96, 119 97: query97, 120 98: query98, 121 99: query99, 122 } 123 124 // TODO(yuzefovich): remove once these queries are "enabled." 125 var ( 126 _ = query27 127 _ = query36 128 _ = query70 129 _ = query86 130 ) 131 132 const ( 133 query1 = ` 134 WITH 135 customer_total_return 136 AS ( 137 SELECT 138 sr_customer_sk AS ctr_customer_sk, 139 sr_store_sk AS ctr_store_sk, 140 sum(sr_fee) AS ctr_total_return 141 FROM 142 store_returns, date_dim 143 WHERE 144 sr_returned_date_sk = d_date_sk 145 AND d_year = 2000 146 GROUP BY 147 sr_customer_sk, sr_store_sk 148 ) 149 SELECT 150 c_customer_id 151 FROM 152 customer_total_return AS ctr1, store, customer 153 WHERE 154 ctr1.ctr_total_return 155 > ( 156 SELECT 157 avg(ctr_total_return) * 1.2 158 FROM 159 customer_total_return AS ctr2 160 WHERE 161 ctr1.ctr_store_sk = ctr2.ctr_store_sk 162 ) 163 AND s_store_sk = ctr1.ctr_store_sk 164 AND s_state = 'TN' 165 AND ctr1.ctr_customer_sk = c_customer_sk 166 ORDER BY 167 c_customer_id 168 LIMIT 169 100; 170 ` 171 172 query2 = ` 173 WITH 174 wscs 175 AS ( 176 SELECT 177 sold_date_sk, sales_price 178 FROM 179 ( 180 SELECT 181 ws_sold_date_sk AS sold_date_sk, 182 ws_ext_sales_price AS sales_price 183 FROM 184 web_sales 185 UNION ALL 186 SELECT 187 cs_sold_date_sk AS sold_date_sk, 188 cs_ext_sales_price 189 AS sales_price 190 FROM 191 catalog_sales 192 ) 193 ), 194 wswscs 195 AS ( 196 SELECT 197 d_week_seq, 198 sum( 199 CASE 200 WHEN (d_day_name = 'Sunday') 201 THEN sales_price 202 ELSE NULL 203 END 204 ) 205 AS sun_sales, 206 sum( 207 CASE 208 WHEN (d_day_name = 'Monday') 209 THEN sales_price 210 ELSE NULL 211 END 212 ) 213 AS mon_sales, 214 sum( 215 CASE 216 WHEN (d_day_name = 'Tuesday') 217 THEN sales_price 218 ELSE NULL 219 END 220 ) 221 AS tue_sales, 222 sum( 223 CASE 224 WHEN (d_day_name = 'Wednesday') 225 THEN sales_price 226 ELSE NULL 227 END 228 ) 229 AS wed_sales, 230 sum( 231 CASE 232 WHEN (d_day_name = 'Thursday') 233 THEN sales_price 234 ELSE NULL 235 END 236 ) 237 AS thu_sales, 238 sum( 239 CASE 240 WHEN (d_day_name = 'Friday') 241 THEN sales_price 242 ELSE NULL 243 END 244 ) 245 AS fri_sales, 246 sum( 247 CASE 248 WHEN (d_day_name = 'Saturday') 249 THEN sales_price 250 ELSE NULL 251 END 252 ) 253 AS sat_sales 254 FROM 255 wscs, date_dim 256 WHERE 257 d_date_sk = sold_date_sk 258 GROUP BY 259 d_week_seq 260 ) 261 SELECT 262 d_week_seq1, 263 round(sun_sales1 / sun_sales2, 2), 264 round(mon_sales1 / mon_sales2, 2), 265 round(tue_sales1 / tue_sales2, 2), 266 round(wed_sales1 / wed_sales2, 2), 267 round(thu_sales1 / thu_sales2, 2), 268 round(fri_sales1 / fri_sales2, 2), 269 round(sat_sales1 / sat_sales2, 2) 270 FROM 271 ( 272 SELECT 273 wswscs.d_week_seq AS d_week_seq1, 274 sun_sales AS sun_sales1, 275 mon_sales AS mon_sales1, 276 tue_sales AS tue_sales1, 277 wed_sales AS wed_sales1, 278 thu_sales AS thu_sales1, 279 fri_sales AS fri_sales1, 280 sat_sales AS sat_sales1 281 FROM 282 wswscs, date_dim 283 WHERE 284 date_dim.d_week_seq = wswscs.d_week_seq 285 AND d_year = 1998 286 ) 287 AS y, 288 ( 289 SELECT 290 wswscs.d_week_seq AS d_week_seq2, 291 sun_sales AS sun_sales2, 292 mon_sales AS mon_sales2, 293 tue_sales AS tue_sales2, 294 wed_sales AS wed_sales2, 295 thu_sales AS thu_sales2, 296 fri_sales AS fri_sales2, 297 sat_sales AS sat_sales2 298 FROM 299 wswscs, date_dim 300 WHERE 301 date_dim.d_week_seq = wswscs.d_week_seq 302 AND d_year = 1998 + 1 303 ) 304 AS z 305 WHERE 306 d_week_seq1 = d_week_seq2 - 53 307 ORDER BY 308 d_week_seq1; 309 ` 310 311 query3 = ` 312 SELECT 313 dt.d_year, 314 item.i_brand_id AS brand_id, 315 item.i_brand AS brand, 316 sum(ss_sales_price) AS sum_agg 317 FROM 318 date_dim AS dt, store_sales, item 319 WHERE 320 dt.d_date_sk = store_sales.ss_sold_date_sk 321 AND store_sales.ss_item_sk = item.i_item_sk 322 AND item.i_manufact_id = 816 323 AND dt.d_moy = 11 324 GROUP BY 325 dt.d_year, item.i_brand, item.i_brand_id 326 ORDER BY 327 dt.d_year, sum_agg DESC, brand_id 328 LIMIT 329 100; 330 ` 331 332 query4 = ` 333 WITH 334 year_total 335 AS ( 336 SELECT 337 c_customer_id AS customer_id, 338 c_first_name AS customer_first_name, 339 c_last_name AS customer_last_name, 340 c_preferred_cust_flag 341 AS customer_preferred_cust_flag, 342 c_birth_country AS customer_birth_country, 343 c_login AS customer_login, 344 c_email_address AS customer_email_address, 345 d_year AS dyear, 346 sum( 347 ( 348 ss_ext_list_price 349 - ss_ext_wholesale_cost 350 - ss_ext_discount_amt 351 + ss_ext_sales_price 352 ) 353 / 2 354 ) 355 AS year_total, 356 's' AS sale_type 357 FROM 358 customer, store_sales, date_dim 359 WHERE 360 c_customer_sk = ss_customer_sk 361 AND ss_sold_date_sk = d_date_sk 362 GROUP BY 363 c_customer_id, 364 c_first_name, 365 c_last_name, 366 c_preferred_cust_flag, 367 c_birth_country, 368 c_login, 369 c_email_address, 370 d_year 371 UNION ALL 372 SELECT 373 c_customer_id AS customer_id, 374 c_first_name AS customer_first_name, 375 c_last_name AS customer_last_name, 376 c_preferred_cust_flag 377 AS customer_preferred_cust_flag, 378 c_birth_country 379 AS customer_birth_country, 380 c_login AS customer_login, 381 c_email_address 382 AS customer_email_address, 383 d_year AS dyear, 384 sum( 385 ( 386 cs_ext_list_price 387 - cs_ext_wholesale_cost 388 - cs_ext_discount_amt 389 + cs_ext_sales_price 390 ) 391 / 2 392 ) 393 AS year_total, 394 'c' AS sale_type 395 FROM 396 customer, catalog_sales, date_dim 397 WHERE 398 c_customer_sk = cs_bill_customer_sk 399 AND cs_sold_date_sk = d_date_sk 400 GROUP BY 401 c_customer_id, 402 c_first_name, 403 c_last_name, 404 c_preferred_cust_flag, 405 c_birth_country, 406 c_login, 407 c_email_address, 408 d_year 409 UNION ALL 410 SELECT 411 c_customer_id AS customer_id, 412 c_first_name AS customer_first_name, 413 c_last_name AS customer_last_name, 414 c_preferred_cust_flag 415 AS customer_preferred_cust_flag, 416 c_birth_country 417 AS customer_birth_country, 418 c_login AS customer_login, 419 c_email_address 420 AS customer_email_address, 421 d_year AS dyear, 422 sum( 423 ( 424 ws_ext_list_price 425 - ws_ext_wholesale_cost 426 - ws_ext_discount_amt 427 + ws_ext_sales_price 428 ) 429 / 2 430 ) 431 AS year_total, 432 'w' AS sale_type 433 FROM 434 customer, web_sales, date_dim 435 WHERE 436 c_customer_sk = ws_bill_customer_sk 437 AND ws_sold_date_sk = d_date_sk 438 GROUP BY 439 c_customer_id, 440 c_first_name, 441 c_last_name, 442 c_preferred_cust_flag, 443 c_birth_country, 444 c_login, 445 c_email_address, 446 d_year 447 ) 448 SELECT 449 t_s_secyear.customer_id, 450 t_s_secyear.customer_first_name, 451 t_s_secyear.customer_last_name, 452 t_s_secyear.customer_birth_country 453 FROM 454 year_total AS t_s_firstyear, 455 year_total AS t_s_secyear, 456 year_total AS t_c_firstyear, 457 year_total AS t_c_secyear, 458 year_total AS t_w_firstyear, 459 year_total AS t_w_secyear 460 WHERE 461 t_s_secyear.customer_id = t_s_firstyear.customer_id 462 AND t_s_firstyear.customer_id = t_c_secyear.customer_id 463 AND t_s_firstyear.customer_id 464 = t_c_firstyear.customer_id 465 AND t_s_firstyear.customer_id 466 = t_w_firstyear.customer_id 467 AND t_s_firstyear.customer_id = t_w_secyear.customer_id 468 AND t_s_firstyear.sale_type = 's' 469 AND t_c_firstyear.sale_type = 'c' 470 AND t_w_firstyear.sale_type = 'w' 471 AND t_s_secyear.sale_type = 's' 472 AND t_c_secyear.sale_type = 'c' 473 AND t_w_secyear.sale_type = 'w' 474 AND t_s_firstyear.dyear = 1999 475 AND t_s_secyear.dyear = 1999 + 1 476 AND t_c_firstyear.dyear = 1999 477 AND t_c_secyear.dyear = 1999 + 1 478 AND t_w_firstyear.dyear = 1999 479 AND t_w_secyear.dyear = 1999 + 1 480 AND t_s_firstyear.year_total > 0 481 AND t_c_firstyear.year_total > 0 482 AND t_w_firstyear.year_total > 0 483 AND CASE 484 WHEN t_c_firstyear.year_total > 0 485 THEN t_c_secyear.year_total 486 / t_c_firstyear.year_total 487 ELSE NULL 488 END 489 > CASE 490 WHEN t_s_firstyear.year_total > 0 491 THEN t_s_secyear.year_total 492 / t_s_firstyear.year_total 493 ELSE NULL 494 END 495 AND CASE 496 WHEN t_c_firstyear.year_total > 0 497 THEN t_c_secyear.year_total 498 / t_c_firstyear.year_total 499 ELSE NULL 500 END 501 > CASE 502 WHEN t_w_firstyear.year_total > 0 503 THEN t_w_secyear.year_total 504 / t_w_firstyear.year_total 505 ELSE NULL 506 END 507 ORDER BY 508 t_s_secyear.customer_id, 509 t_s_secyear.customer_first_name, 510 t_s_secyear.customer_last_name, 511 t_s_secyear.customer_birth_country 512 LIMIT 513 100; 514 ` 515 // NOTE: I added conversion of 14 days to an interval. 516 query5 = ` 517 WITH 518 ssr 519 AS ( 520 SELECT 521 s_store_id, 522 sum(sales_price) AS sales, 523 sum(profit) AS profit, 524 sum(return_amt) AS returns, 525 sum(net_loss) AS profit_loss 526 FROM 527 ( 528 SELECT 529 ss_store_sk AS store_sk, 530 ss_sold_date_sk AS date_sk, 531 ss_ext_sales_price AS sales_price, 532 ss_net_profit AS profit, 533 CAST(0 AS DECIMAL(7,2)) 534 AS return_amt, 535 CAST(0 AS DECIMAL(7,2)) AS net_loss 536 FROM 537 store_sales 538 UNION ALL 539 SELECT 540 sr_store_sk AS store_sk, 541 sr_returned_date_sk AS date_sk, 542 CAST(0 AS DECIMAL(7,2)) 543 AS sales_price, 544 CAST(0 AS DECIMAL(7,2)) 545 AS profit, 546 sr_return_amt AS return_amt, 547 sr_net_loss AS net_loss 548 FROM 549 store_returns 550 ) 551 AS salesreturns, 552 date_dim, 553 store 554 WHERE 555 date_sk = d_date_sk 556 AND d_date BETWEEN CAST('2000-08-19' AS DATE) AND (CAST('2000-08-19' AS DATE) + '14 days'::INTERVAL) 557 AND store_sk = s_store_sk 558 GROUP BY 559 s_store_id 560 ), 561 csr 562 AS ( 563 SELECT 564 cp_catalog_page_id, 565 sum(sales_price) AS sales, 566 sum(profit) AS profit, 567 sum(return_amt) AS returns, 568 sum(net_loss) AS profit_loss 569 FROM 570 ( 571 SELECT 572 cs_catalog_page_sk AS page_sk, 573 cs_sold_date_sk AS date_sk, 574 cs_ext_sales_price AS sales_price, 575 cs_net_profit AS profit, 576 CAST(0 AS DECIMAL(7,2)) 577 AS return_amt, 578 CAST(0 AS DECIMAL(7,2)) AS net_loss 579 FROM 580 catalog_sales 581 UNION ALL 582 SELECT 583 cr_catalog_page_sk AS page_sk, 584 cr_returned_date_sk AS date_sk, 585 CAST(0 AS DECIMAL(7,2)) 586 AS sales_price, 587 CAST(0 AS DECIMAL(7,2)) 588 AS profit, 589 cr_return_amount AS return_amt, 590 cr_net_loss AS net_loss 591 FROM 592 catalog_returns 593 ) 594 AS salesreturns, 595 date_dim, 596 catalog_page 597 WHERE 598 date_sk = d_date_sk 599 AND d_date BETWEEN CAST('2000-08-19' AS DATE) AND (CAST('2000-08-19' AS DATE) + '14 days'::INTERVAL) 600 AND page_sk = cp_catalog_page_sk 601 GROUP BY 602 cp_catalog_page_id 603 ), 604 wsr 605 AS ( 606 SELECT 607 web_site_id, 608 sum(sales_price) AS sales, 609 sum(profit) AS profit, 610 sum(return_amt) AS returns, 611 sum(net_loss) AS profit_loss 612 FROM 613 ( 614 SELECT 615 ws_web_site_sk AS wsr_web_site_sk, 616 ws_sold_date_sk AS date_sk, 617 ws_ext_sales_price AS sales_price, 618 ws_net_profit AS profit, 619 CAST(0 AS DECIMAL(7,2)) 620 AS return_amt, 621 CAST(0 AS DECIMAL(7,2)) AS net_loss 622 FROM 623 web_sales 624 UNION ALL 625 SELECT 626 ws_web_site_sk 627 AS wsr_web_site_sk, 628 wr_returned_date_sk AS date_sk, 629 CAST(0 AS DECIMAL(7,2)) 630 AS sales_price, 631 CAST(0 AS DECIMAL(7,2)) 632 AS profit, 633 wr_return_amt AS return_amt, 634 wr_net_loss AS net_loss 635 FROM 636 web_returns 637 LEFT JOIN web_sales ON 638 wr_item_sk = ws_item_sk 639 AND wr_order_number 640 = ws_order_number 641 ) 642 AS salesreturns, 643 date_dim, 644 web_site 645 WHERE 646 date_sk = d_date_sk 647 AND d_date BETWEEN CAST('2000-08-19' AS DATE) AND (CAST('2000-08-19' AS DATE) + '14 days'::INTERVAL) 648 AND wsr_web_site_sk = web_site_sk 649 GROUP BY 650 web_site_id 651 ) 652 SELECT 653 channel, 654 id, 655 sum(sales) AS sales, 656 sum(returns) AS returns, 657 sum(profit) AS profit 658 FROM 659 ( 660 SELECT 661 'store channel' AS channel, 662 'store' || s_store_id AS id, 663 sales, 664 returns, 665 profit - profit_loss AS profit 666 FROM 667 ssr 668 UNION ALL 669 SELECT 670 'catalog channel' AS channel, 671 'catalog_page' || cp_catalog_page_id AS id, 672 sales, 673 returns, 674 profit - profit_loss AS profit 675 FROM 676 csr 677 UNION ALL 678 SELECT 679 'web channel' AS channel, 680 'web_site' || web_site_id AS id, 681 sales, 682 returns, 683 profit - profit_loss AS profit 684 FROM 685 wsr 686 ) 687 AS x 688 GROUP BY 689 rollup(channel, id) 690 ORDER BY 691 channel, id 692 LIMIT 693 100; 694 ` 695 696 query6 = ` 697 SELECT 698 a.ca_state AS state, count(*) AS cnt 699 FROM 700 customer_address AS a, 701 customer AS c, 702 store_sales AS s, 703 date_dim AS d, 704 item AS i 705 WHERE 706 a.ca_address_sk = c.c_current_addr_sk 707 AND c.c_customer_sk = s.ss_customer_sk 708 AND s.ss_sold_date_sk = d.d_date_sk 709 AND s.ss_item_sk = i.i_item_sk 710 AND d.d_month_seq 711 = ( 712 SELECT 713 DISTINCT d_month_seq 714 FROM 715 date_dim 716 WHERE 717 d_year = 2002 AND d_moy = 3 718 ) 719 AND i.i_current_price 720 > 1.2 721 * ( 722 SELECT 723 avg(j.i_current_price) 724 FROM 725 item AS j 726 WHERE 727 j.i_category = i.i_category 728 ) 729 GROUP BY 730 a.ca_state 731 HAVING 732 count(*) >= 10 733 ORDER BY 734 cnt, a.ca_state 735 LIMIT 736 100; 737 ` 738 739 query7 = ` 740 SELECT 741 i_item_id, 742 avg(ss_quantity) AS agg1, 743 avg(ss_list_price) AS agg2, 744 avg(ss_coupon_amt) AS agg3, 745 avg(ss_sales_price) AS agg4 746 FROM 747 store_sales, 748 customer_demographics, 749 date_dim, 750 item, 751 promotion 752 WHERE 753 ss_sold_date_sk = d_date_sk 754 AND ss_item_sk = i_item_sk 755 AND ss_cdemo_sk = cd_demo_sk 756 AND ss_promo_sk = p_promo_sk 757 AND cd_gender = 'F' 758 AND cd_marital_status = 'W' 759 AND cd_education_status = 'College' 760 AND (p_channel_email = 'N' OR p_channel_event = 'N') 761 AND d_year = 2001 762 GROUP BY 763 i_item_id 764 ORDER BY 765 i_item_id 766 LIMIT 767 100; 768 ` 769 770 query8 = ` 771 SELECT 772 s_store_name, sum(ss_net_profit) 773 FROM 774 store_sales, 775 date_dim, 776 store, 777 ( 778 SELECT 779 ca_zip 780 FROM 781 ( 782 SELECT 783 substr(ca_zip, 1, 5) AS ca_zip 784 FROM 785 customer_address 786 WHERE 787 substr(ca_zip, 1, 5) 788 IN ( 789 '47602', 790 '16704', 791 '35863', 792 '28577', 793 '83910', 794 '36201', 795 '58412', 796 '48162', 797 '28055', 798 '41419', 799 '80332', 800 '38607', 801 '77817', 802 '24891', 803 '16226', 804 '18410', 805 '21231', 806 '59345', 807 '13918', 808 '51089', 809 '20317', 810 '17167', 811 '54585', 812 '67881', 813 '78366', 814 '47770', 815 '18360', 816 '51717', 817 '73108', 818 '14440', 819 '21800', 820 '89338', 821 '45859', 822 '65501', 823 '34948', 824 '25973', 825 '73219', 826 '25333', 827 '17291', 828 '10374', 829 '18829', 830 '60736', 831 '82620', 832 '41351', 833 '52094', 834 '19326', 835 '25214', 836 '54207', 837 '40936', 838 '21814', 839 '79077', 840 '25178', 841 '75742', 842 '77454', 843 '30621', 844 '89193', 845 '27369', 846 '41232', 847 '48567', 848 '83041', 849 '71948', 850 '37119', 851 '68341', 852 '14073', 853 '16891', 854 '62878', 855 '49130', 856 '19833', 857 '24286', 858 '27700', 859 '40979', 860 '50412', 861 '81504', 862 '94835', 863 '84844', 864 '71954', 865 '39503', 866 '57649', 867 '18434', 868 '24987', 869 '12350', 870 '86379', 871 '27413', 872 '44529', 873 '98569', 874 '16515', 875 '27287', 876 '24255', 877 '21094', 878 '16005', 879 '56436', 880 '91110', 881 '68293', 882 '56455', 883 '54558', 884 '10298', 885 '83647', 886 '32754', 887 '27052', 888 '51766', 889 '19444', 890 '13869', 891 '45645', 892 '94791', 893 '57631', 894 '20712', 895 '37788', 896 '41807', 897 '46507', 898 '21727', 899 '71836', 900 '81070', 901 '50632', 902 '88086', 903 '63991', 904 '20244', 905 '31655', 906 '51782', 907 '29818', 908 '63792', 909 '68605', 910 '94898', 911 '36430', 912 '57025', 913 '20601', 914 '82080', 915 '33869', 916 '22728', 917 '35834', 918 '29086', 919 '92645', 920 '98584', 921 '98072', 922 '11652', 923 '78093', 924 '57553', 925 '43830', 926 '71144', 927 '53565', 928 '18700', 929 '90209', 930 '71256', 931 '38353', 932 '54364', 933 '28571', 934 '96560', 935 '57839', 936 '56355', 937 '50679', 938 '45266', 939 '84680', 940 '34306', 941 '34972', 942 '48530', 943 '30106', 944 '15371', 945 '92380', 946 '84247', 947 '92292', 948 '68852', 949 '13338', 950 '34594', 951 '82602', 952 '70073', 953 '98069', 954 '85066', 955 '47289', 956 '11686', 957 '98862', 958 '26217', 959 '47529', 960 '63294', 961 '51793', 962 '35926', 963 '24227', 964 '14196', 965 '24594', 966 '32489', 967 '99060', 968 '49472', 969 '43432', 970 '49211', 971 '14312', 972 '88137', 973 '47369', 974 '56877', 975 '20534', 976 '81755', 977 '15794', 978 '12318', 979 '21060', 980 '73134', 981 '41255', 982 '63073', 983 '81003', 984 '73873', 985 '66057', 986 '51184', 987 '51195', 988 '45676', 989 '92696', 990 '70450', 991 '90669', 992 '98338', 993 '25264', 994 '38919', 995 '59226', 996 '58581', 997 '60298', 998 '17895', 999 '19489', 1000 '52301', 1001 '80846', 1002 '95464', 1003 '68770', 1004 '51634', 1005 '19988', 1006 '18367', 1007 '18421', 1008 '11618', 1009 '67975', 1010 '25494', 1011 '41352', 1012 '95430', 1013 '15734', 1014 '62585', 1015 '97173', 1016 '33773', 1017 '10425', 1018 '75675', 1019 '53535', 1020 '17879', 1021 '41967', 1022 '12197', 1023 '67998', 1024 '79658', 1025 '59130', 1026 '72592', 1027 '14851', 1028 '43933', 1029 '68101', 1030 '50636', 1031 '25717', 1032 '71286', 1033 '24660', 1034 '58058', 1035 '72991', 1036 '95042', 1037 '15543', 1038 '33122', 1039 '69280', 1040 '11912', 1041 '59386', 1042 '27642', 1043 '65177', 1044 '17672', 1045 '33467', 1046 '64592', 1047 '36335', 1048 '54010', 1049 '18767', 1050 '63193', 1051 '42361', 1052 '49254', 1053 '33113', 1054 '33159', 1055 '36479', 1056 '59080', 1057 '11855', 1058 '81963', 1059 '31016', 1060 '49140', 1061 '29392', 1062 '41836', 1063 '32958', 1064 '53163', 1065 '13844', 1066 '73146', 1067 '23952', 1068 '65148', 1069 '93498', 1070 '14530', 1071 '46131', 1072 '58454', 1073 '13376', 1074 '13378', 1075 '83986', 1076 '12320', 1077 '17193', 1078 '59852', 1079 '46081', 1080 '98533', 1081 '52389', 1082 '13086', 1083 '68843', 1084 '31013', 1085 '13261', 1086 '60560', 1087 '13443', 1088 '45533', 1089 '83583', 1090 '11489', 1091 '58218', 1092 '19753', 1093 '22911', 1094 '25115', 1095 '86709', 1096 '27156', 1097 '32669', 1098 '13123', 1099 '51933', 1100 '39214', 1101 '41331', 1102 '66943', 1103 '14155', 1104 '69998', 1105 '49101', 1106 '70070', 1107 '35076', 1108 '14242', 1109 '73021', 1110 '59494', 1111 '15782', 1112 '29752', 1113 '37914', 1114 '74686', 1115 '83086', 1116 '34473', 1117 '15751', 1118 '81084', 1119 '49230', 1120 '91894', 1121 '60624', 1122 '17819', 1123 '28810', 1124 '63180', 1125 '56224', 1126 '39459', 1127 '55233', 1128 '75752', 1129 '43639', 1130 '55349', 1131 '86057', 1132 '62361', 1133 '50788', 1134 '31830', 1135 '58062', 1136 '18218', 1137 '85761', 1138 '60083', 1139 '45484', 1140 '21204', 1141 '90229', 1142 '70041', 1143 '41162', 1144 '35390', 1145 '16364', 1146 '39500', 1147 '68908', 1148 '26689', 1149 '52868', 1150 '81335', 1151 '40146', 1152 '11340', 1153 '61527', 1154 '61794', 1155 '71997', 1156 '30415', 1157 '59004', 1158 '29450', 1159 '58117', 1160 '69952', 1161 '33562', 1162 '83833', 1163 '27385', 1164 '61860', 1165 '96435', 1166 '48333', 1167 '23065', 1168 '32961', 1169 '84919', 1170 '61997', 1171 '99132', 1172 '22815', 1173 '56600', 1174 '68730', 1175 '48017', 1176 '95694', 1177 '32919', 1178 '88217', 1179 '27116', 1180 '28239', 1181 '58032', 1182 '18884', 1183 '16791', 1184 '21343', 1185 '97462', 1186 '18569', 1187 '75660', 1188 '15475' 1189 ) 1190 INTERSECT 1191 SELECT 1192 ca_zip 1193 FROM 1194 ( 1195 SELECT 1196 substr(ca_zip, 1, 5) 1197 AS ca_zip, 1198 count(*) AS cnt 1199 FROM 1200 customer_address, customer 1201 WHERE 1202 ca_address_sk 1203 = c_current_addr_sk 1204 AND c_preferred_cust_flag 1205 = 'Y' 1206 GROUP BY 1207 ca_zip 1208 HAVING 1209 count(*) > 10 1210 ) 1211 AS a1 1212 ) 1213 AS a2 1214 ) 1215 AS v1 1216 WHERE 1217 ss_store_sk = s_store_sk 1218 AND ss_sold_date_sk = d_date_sk 1219 AND d_qoy = 2 1220 AND d_year = 1998 1221 AND substr(s_zip, 1, 2) = substr(v1.ca_zip, 1, 2) 1222 GROUP BY 1223 s_store_name 1224 ORDER BY 1225 s_store_name 1226 LIMIT 1227 100; 1228 ` 1229 1230 query9 = ` 1231 SELECT 1232 CASE 1233 WHEN ( 1234 SELECT 1235 count(*) 1236 FROM 1237 store_sales 1238 WHERE 1239 ss_quantity BETWEEN 1 AND 20 1240 ) 1241 > 1071 1242 THEN ( 1243 SELECT 1244 avg(ss_ext_tax) 1245 FROM 1246 store_sales 1247 WHERE 1248 ss_quantity BETWEEN 1 AND 20 1249 ) 1250 ELSE ( 1251 SELECT 1252 avg(ss_net_paid_inc_tax) 1253 FROM 1254 store_sales 1255 WHERE 1256 ss_quantity BETWEEN 1 AND 20 1257 ) 1258 END 1259 AS bucket1, 1260 CASE 1261 WHEN ( 1262 SELECT 1263 count(*) 1264 FROM 1265 store_sales 1266 WHERE 1267 ss_quantity BETWEEN 21 AND 40 1268 ) 1269 > 39161 1270 THEN ( 1271 SELECT 1272 avg(ss_ext_tax) 1273 FROM 1274 store_sales 1275 WHERE 1276 ss_quantity BETWEEN 21 AND 40 1277 ) 1278 ELSE ( 1279 SELECT 1280 avg(ss_net_paid_inc_tax) 1281 FROM 1282 store_sales 1283 WHERE 1284 ss_quantity BETWEEN 21 AND 40 1285 ) 1286 END 1287 AS bucket2, 1288 CASE 1289 WHEN ( 1290 SELECT 1291 count(*) 1292 FROM 1293 store_sales 1294 WHERE 1295 ss_quantity BETWEEN 41 AND 60 1296 ) 1297 > 29434 1298 THEN ( 1299 SELECT 1300 avg(ss_ext_tax) 1301 FROM 1302 store_sales 1303 WHERE 1304 ss_quantity BETWEEN 41 AND 60 1305 ) 1306 ELSE ( 1307 SELECT 1308 avg(ss_net_paid_inc_tax) 1309 FROM 1310 store_sales 1311 WHERE 1312 ss_quantity BETWEEN 41 AND 60 1313 ) 1314 END 1315 AS bucket3, 1316 CASE 1317 WHEN ( 1318 SELECT 1319 count(*) 1320 FROM 1321 store_sales 1322 WHERE 1323 ss_quantity BETWEEN 61 AND 80 1324 ) 1325 > 6568 1326 THEN ( 1327 SELECT 1328 avg(ss_ext_tax) 1329 FROM 1330 store_sales 1331 WHERE 1332 ss_quantity BETWEEN 61 AND 80 1333 ) 1334 ELSE ( 1335 SELECT 1336 avg(ss_net_paid_inc_tax) 1337 FROM 1338 store_sales 1339 WHERE 1340 ss_quantity BETWEEN 61 AND 80 1341 ) 1342 END 1343 AS bucket4, 1344 CASE 1345 WHEN ( 1346 SELECT 1347 count(*) 1348 FROM 1349 store_sales 1350 WHERE 1351 ss_quantity BETWEEN 81 AND 100 1352 ) 1353 > 21216 1354 THEN ( 1355 SELECT 1356 avg(ss_ext_tax) 1357 FROM 1358 store_sales 1359 WHERE 1360 ss_quantity BETWEEN 81 AND 100 1361 ) 1362 ELSE ( 1363 SELECT 1364 avg(ss_net_paid_inc_tax) 1365 FROM 1366 store_sales 1367 WHERE 1368 ss_quantity BETWEEN 81 AND 100 1369 ) 1370 END 1371 AS bucket5 1372 FROM 1373 reason 1374 WHERE 1375 r_reason_sk = 1; 1376 ` 1377 1378 query10 = ` 1379 SELECT 1380 cd_gender, 1381 cd_marital_status, 1382 cd_education_status, 1383 count(*) AS cnt1, 1384 cd_purchase_estimate, 1385 count(*) AS cnt2, 1386 cd_credit_rating, 1387 count(*) AS cnt3, 1388 cd_dep_count, 1389 count(*) AS cnt4, 1390 cd_dep_employed_count, 1391 count(*) AS cnt5, 1392 cd_dep_college_count, 1393 count(*) AS cnt6 1394 FROM 1395 customer AS c, 1396 customer_address AS ca, 1397 customer_demographics 1398 WHERE 1399 c.c_current_addr_sk = ca.ca_address_sk 1400 AND ca_county 1401 IN ( 1402 'Fairfield County', 1403 'Campbell County', 1404 'Washtenaw County', 1405 'Escambia County', 1406 'Cleburne County' 1407 ) 1408 AND cd_demo_sk = c.c_current_cdemo_sk 1409 AND EXISTS( 1410 SELECT 1411 * 1412 FROM 1413 store_sales, date_dim 1414 WHERE 1415 c.c_customer_sk = ss_customer_sk 1416 AND ss_sold_date_sk = d_date_sk 1417 AND d_year = 2001 1418 AND d_moy BETWEEN 3 AND (3 + 3) 1419 ) 1420 AND ( 1421 EXISTS( 1422 SELECT 1423 * 1424 FROM 1425 web_sales, date_dim 1426 WHERE 1427 c.c_customer_sk = ws_bill_customer_sk 1428 AND ws_sold_date_sk = d_date_sk 1429 AND d_year = 2001 1430 AND d_moy BETWEEN 3 AND (3 + 3) 1431 ) 1432 OR EXISTS( 1433 SELECT 1434 * 1435 FROM 1436 catalog_sales, date_dim 1437 WHERE 1438 c.c_customer_sk 1439 = cs_ship_customer_sk 1440 AND cs_sold_date_sk = d_date_sk 1441 AND d_year = 2001 1442 AND d_moy BETWEEN 3 AND (3 + 3) 1443 ) 1444 ) 1445 GROUP BY 1446 cd_gender, 1447 cd_marital_status, 1448 cd_education_status, 1449 cd_purchase_estimate, 1450 cd_credit_rating, 1451 cd_dep_count, 1452 cd_dep_employed_count, 1453 cd_dep_college_count 1454 ORDER BY 1455 cd_gender, 1456 cd_marital_status, 1457 cd_education_status, 1458 cd_purchase_estimate, 1459 cd_credit_rating, 1460 cd_dep_count, 1461 cd_dep_employed_count, 1462 cd_dep_college_count 1463 LIMIT 1464 100; 1465 ` 1466 1467 query11 = ` 1468 WITH 1469 year_total 1470 AS ( 1471 SELECT 1472 c_customer_id AS customer_id, 1473 c_first_name AS customer_first_name, 1474 c_last_name AS customer_last_name, 1475 c_preferred_cust_flag 1476 AS customer_preferred_cust_flag, 1477 c_birth_country AS customer_birth_country, 1478 c_login AS customer_login, 1479 c_email_address AS customer_email_address, 1480 d_year AS dyear, 1481 sum(ss_ext_list_price - ss_ext_discount_amt) 1482 AS year_total, 1483 's' AS sale_type 1484 FROM 1485 customer, store_sales, date_dim 1486 WHERE 1487 c_customer_sk = ss_customer_sk 1488 AND ss_sold_date_sk = d_date_sk 1489 GROUP BY 1490 c_customer_id, 1491 c_first_name, 1492 c_last_name, 1493 c_preferred_cust_flag, 1494 c_birth_country, 1495 c_login, 1496 c_email_address, 1497 d_year 1498 UNION ALL 1499 SELECT 1500 c_customer_id AS customer_id, 1501 c_first_name AS customer_first_name, 1502 c_last_name AS customer_last_name, 1503 c_preferred_cust_flag 1504 AS customer_preferred_cust_flag, 1505 c_birth_country 1506 AS customer_birth_country, 1507 c_login AS customer_login, 1508 c_email_address 1509 AS customer_email_address, 1510 d_year AS dyear, 1511 sum( 1512 ws_ext_list_price 1513 - ws_ext_discount_amt 1514 ) 1515 AS year_total, 1516 'w' AS sale_type 1517 FROM 1518 customer, web_sales, date_dim 1519 WHERE 1520 c_customer_sk = ws_bill_customer_sk 1521 AND ws_sold_date_sk = d_date_sk 1522 GROUP BY 1523 c_customer_id, 1524 c_first_name, 1525 c_last_name, 1526 c_preferred_cust_flag, 1527 c_birth_country, 1528 c_login, 1529 c_email_address, 1530 d_year 1531 ) 1532 SELECT 1533 t_s_secyear.customer_id, 1534 t_s_secyear.customer_first_name, 1535 t_s_secyear.customer_last_name, 1536 t_s_secyear.customer_email_address 1537 FROM 1538 year_total AS t_s_firstyear, 1539 year_total AS t_s_secyear, 1540 year_total AS t_w_firstyear, 1541 year_total AS t_w_secyear 1542 WHERE 1543 t_s_secyear.customer_id = t_s_firstyear.customer_id 1544 AND t_s_firstyear.customer_id = t_w_secyear.customer_id 1545 AND t_s_firstyear.customer_id 1546 = t_w_firstyear.customer_id 1547 AND t_s_firstyear.sale_type = 's' 1548 AND t_w_firstyear.sale_type = 'w' 1549 AND t_s_secyear.sale_type = 's' 1550 AND t_w_secyear.sale_type = 'w' 1551 AND t_s_firstyear.dyear = 1998 1552 AND t_s_secyear.dyear = 1998 + 1 1553 AND t_w_firstyear.dyear = 1998 1554 AND t_w_secyear.dyear = 1998 + 1 1555 AND t_s_firstyear.year_total > 0 1556 AND t_w_firstyear.year_total > 0 1557 AND CASE 1558 WHEN t_w_firstyear.year_total > 0 1559 THEN t_w_secyear.year_total 1560 / t_w_firstyear.year_total 1561 ELSE 0.0 1562 END 1563 > CASE 1564 WHEN t_s_firstyear.year_total > 0 1565 THEN t_s_secyear.year_total 1566 / t_s_firstyear.year_total 1567 ELSE 0.0 1568 END 1569 ORDER BY 1570 t_s_secyear.customer_id, 1571 t_s_secyear.customer_first_name, 1572 t_s_secyear.customer_last_name, 1573 t_s_secyear.customer_email_address 1574 LIMIT 1575 100; 1576 ` 1577 1578 // NOTE: I added conversion of 30 days to an interval. 1579 query12 = ` 1580 SELECT 1581 i_item_id, 1582 i_item_desc, 1583 i_category, 1584 i_class, 1585 i_current_price, 1586 sum(ws_ext_sales_price) AS itemrevenue, 1587 sum(ws_ext_sales_price) * 100 1588 / sum(sum(ws_ext_sales_price)) OVER ( 1589 PARTITION BY i_class 1590 ) 1591 AS revenueratio 1592 FROM 1593 web_sales, item, date_dim 1594 WHERE 1595 ws_item_sk = i_item_sk 1596 AND i_category IN ('Men', 'Books', 'Electronics') 1597 AND ws_sold_date_sk = d_date_sk 1598 AND d_date BETWEEN CAST('2001-06-15' AS DATE) AND (CAST('2001-06-15' AS DATE) + '30 days'::INTERVAL) 1599 GROUP BY 1600 i_item_id, 1601 i_item_desc, 1602 i_category, 1603 i_class, 1604 i_current_price 1605 ORDER BY 1606 i_category, 1607 i_class, 1608 i_item_id, 1609 i_item_desc, 1610 revenueratio 1611 LIMIT 1612 100; 1613 ` 1614 1615 query13 = ` 1616 SELECT 1617 avg(ss_quantity), 1618 avg(ss_ext_sales_price), 1619 avg(ss_ext_wholesale_cost), 1620 sum(ss_ext_wholesale_cost) 1621 FROM 1622 store_sales, 1623 store, 1624 customer_demographics, 1625 household_demographics, 1626 customer_address, 1627 date_dim 1628 WHERE 1629 s_store_sk = ss_store_sk 1630 AND ss_sold_date_sk = d_date_sk 1631 AND d_year = 2001 1632 AND ( 1633 ( 1634 ss_hdemo_sk = hd_demo_sk 1635 AND cd_demo_sk = ss_cdemo_sk 1636 AND cd_marital_status = 'M' 1637 AND cd_education_status = 'College' 1638 AND ss_sales_price BETWEEN 100.00 AND 150.00 1639 AND hd_dep_count = 3 1640 ) 1641 OR ( 1642 ss_hdemo_sk = hd_demo_sk 1643 AND cd_demo_sk = ss_cdemo_sk 1644 AND cd_marital_status = 'D' 1645 AND cd_education_status = 'Primary' 1646 AND ss_sales_price BETWEEN 50.00 AND 100.00 1647 AND hd_dep_count = 1 1648 ) 1649 OR ( 1650 ss_hdemo_sk = hd_demo_sk 1651 AND cd_demo_sk = ss_cdemo_sk 1652 AND cd_marital_status = 'W' 1653 AND cd_education_status = '2 yr Degree' 1654 AND ss_sales_price BETWEEN 150.00 AND 200.00 1655 AND hd_dep_count = 1 1656 ) 1657 ) 1658 AND ( 1659 ( 1660 ss_addr_sk = ca_address_sk 1661 AND ca_country = 'United States' 1662 AND ca_state IN ('IL', 'TN', 'TX') 1663 AND ss_net_profit BETWEEN 100 AND 200 1664 ) 1665 OR ( 1666 ss_addr_sk = ca_address_sk 1667 AND ca_country = 'United States' 1668 AND ca_state IN ('WY', 'OH', 'ID') 1669 AND ss_net_profit BETWEEN 150 AND 300 1670 ) 1671 OR ( 1672 ss_addr_sk = ca_address_sk 1673 AND ca_country = 'United States' 1674 AND ca_state IN ('MS', 'SC', 'IA') 1675 AND ss_net_profit BETWEEN 50 AND 250 1676 ) 1677 ); 1678 ` 1679 1680 query14 = ` 1681 WITH 1682 cross_items 1683 AS ( 1684 SELECT 1685 i_item_sk AS ss_item_sk 1686 FROM 1687 item, 1688 ( 1689 SELECT 1690 iss.i_brand_id AS brand_id, 1691 iss.i_class_id AS class_id, 1692 iss.i_category_id AS category_id 1693 FROM 1694 store_sales, 1695 item AS iss, 1696 date_dim AS d1 1697 WHERE 1698 ss_item_sk = iss.i_item_sk 1699 AND ss_sold_date_sk = d1.d_date_sk 1700 AND d1.d_year BETWEEN 1999 AND (1999 + 2) 1701 INTERSECT 1702 SELECT 1703 ics.i_brand_id, 1704 ics.i_class_id, 1705 ics.i_category_id 1706 FROM 1707 catalog_sales, 1708 item AS ics, 1709 date_dim AS d2 1710 WHERE 1711 cs_item_sk = ics.i_item_sk 1712 AND cs_sold_date_sk 1713 = d2.d_date_sk 1714 AND d2.d_year BETWEEN 1999 AND (1999 + 2) 1715 INTERSECT 1716 SELECT 1717 iws.i_brand_id, 1718 iws.i_class_id, 1719 iws.i_category_id 1720 FROM 1721 web_sales, 1722 item AS iws, 1723 date_dim AS d3 1724 WHERE 1725 ws_item_sk = iws.i_item_sk 1726 AND ws_sold_date_sk 1727 = d3.d_date_sk 1728 AND d3.d_year BETWEEN 1999 AND (1999 + 2) 1729 ) 1730 WHERE 1731 i_brand_id = brand_id 1732 AND i_class_id = class_id 1733 AND i_category_id = category_id 1734 ), 1735 avg_sales 1736 AS ( 1737 SELECT 1738 avg(quantity * list_price) AS average_sales 1739 FROM 1740 ( 1741 SELECT 1742 ss_quantity AS quantity, 1743 ss_list_price AS list_price 1744 FROM 1745 store_sales, date_dim 1746 WHERE 1747 ss_sold_date_sk = d_date_sk 1748 AND d_year BETWEEN 1999 AND (1999 + 2) 1749 UNION ALL 1750 SELECT 1751 cs_quantity AS quantity, 1752 cs_list_price AS list_price 1753 FROM 1754 catalog_sales, date_dim 1755 WHERE 1756 cs_sold_date_sk = d_date_sk 1757 AND d_year BETWEEN 1999 AND (1999 + 2) 1758 UNION ALL 1759 SELECT 1760 ws_quantity AS quantity, 1761 ws_list_price AS list_price 1762 FROM 1763 web_sales, date_dim 1764 WHERE 1765 ws_sold_date_sk = d_date_sk 1766 AND d_year BETWEEN 1999 AND (1999 + 2) 1767 ) 1768 AS x 1769 ) 1770 SELECT 1771 channel, 1772 i_brand_id, 1773 i_class_id, 1774 i_category_id, 1775 sum(sales), 1776 sum(number_sales) 1777 FROM 1778 ( 1779 SELECT 1780 'store' AS channel, 1781 i_brand_id, 1782 i_class_id, 1783 i_category_id, 1784 sum(ss_quantity * ss_list_price) AS sales, 1785 count(*) AS number_sales 1786 FROM 1787 store_sales, item, date_dim 1788 WHERE 1789 ss_item_sk 1790 IN (SELECT ss_item_sk FROM cross_items) 1791 AND ss_item_sk = i_item_sk 1792 AND ss_sold_date_sk = d_date_sk 1793 AND d_year = 1999 + 2 1794 AND d_moy = 11 1795 GROUP BY 1796 i_brand_id, i_class_id, i_category_id 1797 HAVING 1798 sum(ss_quantity * ss_list_price) 1799 > (SELECT average_sales FROM avg_sales) 1800 UNION ALL 1801 SELECT 1802 'catalog' AS channel, 1803 i_brand_id, 1804 i_class_id, 1805 i_category_id, 1806 sum(cs_quantity * cs_list_price) AS sales, 1807 count(*) AS number_sales 1808 FROM 1809 catalog_sales, item, date_dim 1810 WHERE 1811 cs_item_sk 1812 IN (SELECT ss_item_sk FROM cross_items) 1813 AND cs_item_sk = i_item_sk 1814 AND cs_sold_date_sk = d_date_sk 1815 AND d_year = 1999 + 2 1816 AND d_moy = 11 1817 GROUP BY 1818 i_brand_id, i_class_id, i_category_id 1819 HAVING 1820 sum(cs_quantity * cs_list_price) 1821 > (SELECT average_sales FROM avg_sales) 1822 UNION ALL 1823 SELECT 1824 'web' AS channel, 1825 i_brand_id, 1826 i_class_id, 1827 i_category_id, 1828 sum(ws_quantity * ws_list_price) AS sales, 1829 count(*) AS number_sales 1830 FROM 1831 web_sales, item, date_dim 1832 WHERE 1833 ws_item_sk 1834 IN (SELECT ss_item_sk FROM cross_items) 1835 AND ws_item_sk = i_item_sk 1836 AND ws_sold_date_sk = d_date_sk 1837 AND d_year = 1999 + 2 1838 AND d_moy = 11 1839 GROUP BY 1840 i_brand_id, i_class_id, i_category_id 1841 HAVING 1842 sum(ws_quantity * ws_list_price) 1843 > (SELECT average_sales FROM avg_sales) 1844 ) 1845 AS y 1846 GROUP BY 1847 rollup(channel, i_brand_id, i_class_id, i_category_id) 1848 ORDER BY 1849 channel, i_brand_id, i_class_id, i_category_id 1850 LIMIT 1851 100; 1852 WITH 1853 cross_items 1854 AS ( 1855 SELECT 1856 i_item_sk AS ss_item_sk 1857 FROM 1858 item, 1859 ( 1860 SELECT 1861 iss.i_brand_id AS brand_id, 1862 iss.i_class_id AS class_id, 1863 iss.i_category_id AS category_id 1864 FROM 1865 store_sales, 1866 item AS iss, 1867 date_dim AS d1 1868 WHERE 1869 ss_item_sk = iss.i_item_sk 1870 AND ss_sold_date_sk = d1.d_date_sk 1871 AND d1.d_year BETWEEN 1999 AND (1999 + 2) 1872 INTERSECT 1873 SELECT 1874 ics.i_brand_id, 1875 ics.i_class_id, 1876 ics.i_category_id 1877 FROM 1878 catalog_sales, 1879 item AS ics, 1880 date_dim AS d2 1881 WHERE 1882 cs_item_sk = ics.i_item_sk 1883 AND cs_sold_date_sk 1884 = d2.d_date_sk 1885 AND d2.d_year BETWEEN 1999 AND (1999 + 2) 1886 INTERSECT 1887 SELECT 1888 iws.i_brand_id, 1889 iws.i_class_id, 1890 iws.i_category_id 1891 FROM 1892 web_sales, 1893 item AS iws, 1894 date_dim AS d3 1895 WHERE 1896 ws_item_sk = iws.i_item_sk 1897 AND ws_sold_date_sk 1898 = d3.d_date_sk 1899 AND d3.d_year BETWEEN 1999 AND (1999 + 2) 1900 ) 1901 AS x 1902 WHERE 1903 i_brand_id = brand_id 1904 AND i_class_id = class_id 1905 AND i_category_id = category_id 1906 ), 1907 avg_sales 1908 AS ( 1909 SELECT 1910 avg(quantity * list_price) AS average_sales 1911 FROM 1912 ( 1913 SELECT 1914 ss_quantity AS quantity, 1915 ss_list_price AS list_price 1916 FROM 1917 store_sales, date_dim 1918 WHERE 1919 ss_sold_date_sk = d_date_sk 1920 AND d_year BETWEEN 1999 AND (1999 + 2) 1921 UNION ALL 1922 SELECT 1923 cs_quantity AS quantity, 1924 cs_list_price AS list_price 1925 FROM 1926 catalog_sales, date_dim 1927 WHERE 1928 cs_sold_date_sk = d_date_sk 1929 AND d_year BETWEEN 1999 AND (1999 + 2) 1930 UNION ALL 1931 SELECT 1932 ws_quantity AS quantity, 1933 ws_list_price AS list_price 1934 FROM 1935 web_sales, date_dim 1936 WHERE 1937 ws_sold_date_sk = d_date_sk 1938 AND d_year BETWEEN 1999 AND (1999 + 2) 1939 ) 1940 AS x 1941 ) 1942 SELECT 1943 this_year.channel AS ty_channel, 1944 this_year.i_brand_id AS ty_brand, 1945 this_year.i_class_id AS ty_class, 1946 this_year.i_category_id AS ty_category, 1947 this_year.sales AS ty_sales, 1948 this_year.number_sales AS ty_number_sales, 1949 last_year.channel AS ly_channel, 1950 last_year.i_brand_id AS ly_brand, 1951 last_year.i_class_id AS ly_class, 1952 last_year.i_category_id AS ly_category, 1953 last_year.sales AS ly_sales, 1954 last_year.number_sales AS ly_number_sales 1955 FROM 1956 ( 1957 SELECT 1958 'store' AS channel, 1959 i_brand_id, 1960 i_class_id, 1961 i_category_id, 1962 sum(ss_quantity * ss_list_price) AS sales, 1963 count(*) AS number_sales 1964 FROM 1965 store_sales, item, date_dim 1966 WHERE 1967 ss_item_sk 1968 IN (SELECT ss_item_sk FROM cross_items) 1969 AND ss_item_sk = i_item_sk 1970 AND ss_sold_date_sk = d_date_sk 1971 AND d_week_seq 1972 = ( 1973 SELECT 1974 d_week_seq 1975 FROM 1976 date_dim 1977 WHERE 1978 d_year = 1999 + 1 1979 AND d_moy = 12 1980 AND d_dom = 3 1981 ) 1982 GROUP BY 1983 i_brand_id, i_class_id, i_category_id 1984 HAVING 1985 sum(ss_quantity * ss_list_price) 1986 > (SELECT average_sales FROM avg_sales) 1987 ) 1988 AS this_year, 1989 ( 1990 SELECT 1991 'store' AS channel, 1992 i_brand_id, 1993 i_class_id, 1994 i_category_id, 1995 sum(ss_quantity * ss_list_price) AS sales, 1996 count(*) AS number_sales 1997 FROM 1998 store_sales, item, date_dim 1999 WHERE 2000 ss_item_sk 2001 IN (SELECT ss_item_sk FROM cross_items) 2002 AND ss_item_sk = i_item_sk 2003 AND ss_sold_date_sk = d_date_sk 2004 AND d_week_seq 2005 = ( 2006 SELECT 2007 d_week_seq 2008 FROM 2009 date_dim 2010 WHERE 2011 d_year = 1999 2012 AND d_moy = 12 2013 AND d_dom = 3 2014 ) 2015 GROUP BY 2016 i_brand_id, i_class_id, i_category_id 2017 HAVING 2018 sum(ss_quantity * ss_list_price) 2019 > (SELECT average_sales FROM avg_sales) 2020 ) 2021 AS last_year 2022 WHERE 2023 this_year.i_brand_id = last_year.i_brand_id 2024 AND this_year.i_class_id = last_year.i_class_id 2025 AND this_year.i_category_id = last_year.i_category_id 2026 ORDER BY 2027 this_year.channel, 2028 this_year.i_brand_id, 2029 this_year.i_class_id, 2030 this_year.i_category_id 2031 LIMIT 2032 100; 2033 ` 2034 2035 query15 = ` 2036 SELECT 2037 ca_zip, sum(cs_sales_price) 2038 FROM 2039 catalog_sales, customer, customer_address, date_dim 2040 WHERE 2041 cs_bill_customer_sk = c_customer_sk 2042 AND c_current_addr_sk = ca_address_sk 2043 AND ( 2044 substr(ca_zip, 1, 5) 2045 IN ( 2046 '85669', 2047 '86197', 2048 '88274', 2049 '83405', 2050 '86475', 2051 '85392', 2052 '85460', 2053 '80348', 2054 '81792' 2055 ) 2056 OR ca_state IN ('CA', 'WA', 'GA') 2057 OR cs_sales_price > 500 2058 ) 2059 AND cs_sold_date_sk = d_date_sk 2060 AND d_qoy = 2 2061 AND d_year = 2001 2062 GROUP BY 2063 ca_zip 2064 ORDER BY 2065 ca_zip 2066 LIMIT 2067 100; 2068 ` 2069 2070 // NOTE: I added conversion of 60 days to an interval. 2071 query16 = ` 2072 SELECT 2073 count(DISTINCT cs_order_number) AS "order count", 2074 sum(cs_ext_ship_cost) AS "total shipping cost", 2075 sum(cs_net_profit) AS "total net profit" 2076 FROM 2077 catalog_sales AS cs1, 2078 date_dim, 2079 customer_address, 2080 call_center 2081 WHERE 2082 d_date BETWEEN '2002-4-01' AND (CAST('2002-4-01' AS DATE) + '60 days'::INTERVAL) 2083 AND cs1.cs_ship_date_sk = d_date_sk 2084 AND cs1.cs_ship_addr_sk = ca_address_sk 2085 AND ca_state = 'PA' 2086 AND cs1.cs_call_center_sk = cc_call_center_sk 2087 AND cc_county 2088 IN ( 2089 'Williamson County', 2090 'Williamson County', 2091 'Williamson County', 2092 'Williamson County', 2093 'Williamson County' 2094 ) 2095 AND EXISTS( 2096 SELECT 2097 * 2098 FROM 2099 catalog_sales AS cs2 2100 WHERE 2101 cs1.cs_order_number = cs2.cs_order_number 2102 AND cs1.cs_warehouse_sk 2103 != cs2.cs_warehouse_sk 2104 ) 2105 AND NOT 2106 EXISTS( 2107 SELECT 2108 * 2109 FROM 2110 catalog_returns AS cr1 2111 WHERE 2112 cs1.cs_order_number 2113 = cr1.cr_order_number 2114 ) 2115 ORDER BY 2116 count(DISTINCT cs_order_number) 2117 LIMIT 2118 100; 2119 ` 2120 2121 query17 = ` 2122 SELECT 2123 i_item_id, 2124 i_item_desc, 2125 s_state, 2126 count(ss_quantity) AS store_sales_quantitycount, 2127 avg(ss_quantity) AS store_sales_quantityave, 2128 stddev_samp(ss_quantity) AS store_sales_quantitystdev, 2129 stddev_samp(ss_quantity) / avg(ss_quantity) 2130 AS store_sales_quantitycov, 2131 count(sr_return_quantity) 2132 AS store_returns_quantitycount, 2133 avg(sr_return_quantity) AS store_returns_quantityave, 2134 stddev_samp(sr_return_quantity) 2135 AS store_returns_quantitystdev, 2136 stddev_samp(sr_return_quantity) 2137 / avg(sr_return_quantity) 2138 AS store_returns_quantitycov, 2139 count(cs_quantity) AS catalog_sales_quantitycount, 2140 avg(cs_quantity) AS catalog_sales_quantityave, 2141 stddev_samp(cs_quantity) AS catalog_sales_quantitystdev, 2142 stddev_samp(cs_quantity) / avg(cs_quantity) 2143 AS catalog_sales_quantitycov 2144 FROM 2145 store_sales, 2146 store_returns, 2147 catalog_sales, 2148 date_dim AS d1, 2149 date_dim AS d2, 2150 date_dim AS d3, 2151 store, 2152 item 2153 WHERE 2154 d1.d_quarter_name = '2001Q1' 2155 AND d1.d_date_sk = ss_sold_date_sk 2156 AND i_item_sk = ss_item_sk 2157 AND s_store_sk = ss_store_sk 2158 AND ss_customer_sk = sr_customer_sk 2159 AND ss_item_sk = sr_item_sk 2160 AND ss_ticket_number = sr_ticket_number 2161 AND sr_returned_date_sk = d2.d_date_sk 2162 AND d2.d_quarter_name IN ('2001Q1', '2001Q2', '2001Q3') 2163 AND sr_customer_sk = cs_bill_customer_sk 2164 AND sr_item_sk = cs_item_sk 2165 AND cs_sold_date_sk = d3.d_date_sk 2166 AND d3.d_quarter_name IN ('2001Q1', '2001Q2', '2001Q3') 2167 GROUP BY 2168 i_item_id, i_item_desc, s_state 2169 ORDER BY 2170 i_item_id, i_item_desc, s_state 2171 LIMIT 2172 100; 2173 ` 2174 2175 query18 = ` 2176 SELECT 2177 i_item_id, 2178 ca_country, 2179 ca_state, 2180 ca_county, 2181 avg(CAST(cs_quantity AS DECIMAL(12,2))) AS agg1, 2182 avg(CAST(cs_list_price AS DECIMAL(12,2))) AS agg2, 2183 avg(CAST(cs_coupon_amt AS DECIMAL(12,2))) AS agg3, 2184 avg(CAST(cs_sales_price AS DECIMAL(12,2))) AS agg4, 2185 avg(CAST(cs_net_profit AS DECIMAL(12,2))) AS agg5, 2186 avg(CAST(c_birth_year AS DECIMAL(12,2))) AS agg6, 2187 avg(CAST(cd1.cd_dep_count AS DECIMAL(12,2))) AS agg7 2188 FROM 2189 catalog_sales, 2190 customer_demographics AS cd1, 2191 customer_demographics AS cd2, 2192 customer, 2193 customer_address, 2194 date_dim, 2195 item 2196 WHERE 2197 cs_sold_date_sk = d_date_sk 2198 AND cs_item_sk = i_item_sk 2199 AND cs_bill_cdemo_sk = cd1.cd_demo_sk 2200 AND cs_bill_customer_sk = c_customer_sk 2201 AND cd1.cd_gender = 'F' 2202 AND cd1.cd_education_status = 'Primary' 2203 AND c_current_cdemo_sk = cd2.cd_demo_sk 2204 AND c_current_addr_sk = ca_address_sk 2205 AND c_birth_month IN (1, 3, 7, 11, 10, 4) 2206 AND d_year = 2001 2207 AND ca_state 2208 IN ('AL', 'MO', 'TN', 'GA', 'MT', 'IN', 'CA') 2209 GROUP BY 2210 rollup(i_item_id, ca_country, ca_state, ca_county) 2211 ORDER BY 2212 ca_country, ca_state, ca_county, i_item_id 2213 LIMIT 2214 100; 2215 ` 2216 2217 query19 = ` 2218 SELECT 2219 i_brand_id AS brand_id, 2220 i_brand AS brand, 2221 i_manufact_id, 2222 i_manufact, 2223 sum(ss_ext_sales_price) AS ext_price 2224 FROM 2225 date_dim, 2226 store_sales, 2227 item, 2228 customer, 2229 customer_address, 2230 store 2231 WHERE 2232 d_date_sk = ss_sold_date_sk 2233 AND ss_item_sk = i_item_sk 2234 AND i_manager_id = 14 2235 AND d_moy = 11 2236 AND d_year = 2002 2237 AND ss_customer_sk = c_customer_sk 2238 AND c_current_addr_sk = ca_address_sk 2239 AND substr(ca_zip, 1, 5) != substr(s_zip, 1, 5) 2240 AND ss_store_sk = s_store_sk 2241 GROUP BY 2242 i_brand, i_brand_id, i_manufact_id, i_manufact 2243 ORDER BY 2244 ext_price DESC, 2245 i_brand, 2246 i_brand_id, 2247 i_manufact_id, 2248 i_manufact 2249 LIMIT 2250 100; 2251 ` 2252 2253 // NOTE: I added conversion of 30 days to an interval. 2254 query20 = ` 2255 SELECT 2256 i_item_id, 2257 i_item_desc, 2258 i_category, 2259 i_class, 2260 i_current_price, 2261 sum(cs_ext_sales_price) AS itemrevenue, 2262 sum(cs_ext_sales_price) * 100 2263 / sum(sum(cs_ext_sales_price)) OVER ( 2264 PARTITION BY i_class 2265 ) 2266 AS revenueratio 2267 FROM 2268 catalog_sales, item, date_dim 2269 WHERE 2270 cs_item_sk = i_item_sk 2271 AND i_category IN ('Books', 'Music', 'Sports') 2272 AND cs_sold_date_sk = d_date_sk 2273 AND d_date BETWEEN CAST('2002-06-18' AS DATE) AND (CAST('2002-06-18' AS DATE) + '30 days'::INTERVAL) 2274 GROUP BY 2275 i_item_id, 2276 i_item_desc, 2277 i_category, 2278 i_class, 2279 i_current_price 2280 ORDER BY 2281 i_category, 2282 i_class, 2283 i_item_id, 2284 i_item_desc, 2285 revenueratio 2286 LIMIT 2287 100; 2288 ` 2289 2290 // NOTE: I added conversion of 30 days to an interval. 2291 query21 = ` 2292 SELECT 2293 * 2294 FROM 2295 ( 2296 SELECT 2297 w_warehouse_name, 2298 i_item_id, 2299 sum( 2300 CASE 2301 WHEN ( 2302 CAST(d_date AS DATE) 2303 < CAST('1999-06-22' AS DATE) 2304 ) 2305 THEN inv_quantity_on_hand 2306 ELSE 0 2307 END 2308 ) 2309 AS inv_before, 2310 sum( 2311 CASE 2312 WHEN ( 2313 CAST(d_date AS DATE) 2314 >= CAST('1999-06-22' AS DATE) 2315 ) 2316 THEN inv_quantity_on_hand 2317 ELSE 0 2318 END 2319 ) 2320 AS inv_after 2321 FROM 2322 inventory, warehouse, item, date_dim 2323 WHERE 2324 i_current_price BETWEEN 0.99 AND 1.49 2325 AND i_item_sk = inv_item_sk 2326 AND inv_warehouse_sk = w_warehouse_sk 2327 AND inv_date_sk = d_date_sk 2328 AND d_date BETWEEN (CAST('1999-06-22' AS DATE) - '30 days'::INTERVAL) AND (CAST('1999-06-22' AS DATE) + '30 days'::INTERVAL) 2329 GROUP BY 2330 w_warehouse_name, i_item_id 2331 ) 2332 AS x 2333 WHERE 2334 (CASE WHEN inv_before > 0 THEN inv_after / inv_before ELSE NULL END) BETWEEN (2.0 / 3.0) AND (3.0 / 2.0) 2335 ORDER BY 2336 w_warehouse_name, i_item_id 2337 LIMIT 2338 100; 2339 ` 2340 2341 query22 = ` 2342 SELECT 2343 i_product_name, 2344 i_brand, 2345 i_class, 2346 i_category, 2347 avg(inv_quantity_on_hand) AS qoh 2348 FROM 2349 inventory, date_dim, item 2350 WHERE 2351 inv_date_sk = d_date_sk 2352 AND inv_item_sk = i_item_sk 2353 AND d_month_seq BETWEEN 1200 AND (1200 + 11) 2354 GROUP BY 2355 rollup(i_product_name, i_brand, i_class, i_category) 2356 ORDER BY 2357 qoh, i_product_name, i_brand, i_class, i_category 2358 LIMIT 2359 100; 2360 ` 2361 2362 query23 = ` 2363 WITH 2364 frequent_ss_items 2365 AS ( 2366 SELECT 2367 substr(i_item_desc, 1, 30) AS itemdesc, 2368 i_item_sk AS item_sk, 2369 d_date AS solddate, 2370 count(*) AS cnt 2371 FROM 2372 store_sales, date_dim, item 2373 WHERE 2374 ss_sold_date_sk = d_date_sk 2375 AND ss_item_sk = i_item_sk 2376 AND d_year 2377 IN (2000, 2000 + 1, 2000 + 2, 2000 + 3) 2378 GROUP BY 2379 substr(i_item_desc, 1, 30), 2380 i_item_sk, 2381 d_date 2382 HAVING 2383 count(*) > 4 2384 ), 2385 max_store_sales 2386 AS ( 2387 SELECT 2388 max(csales) AS tpcds_cmax 2389 FROM 2390 ( 2391 SELECT 2392 c_customer_sk, 2393 sum(ss_quantity * ss_sales_price) 2394 AS csales 2395 FROM 2396 store_sales, customer, date_dim 2397 WHERE 2398 ss_customer_sk = c_customer_sk 2399 AND ss_sold_date_sk = d_date_sk 2400 AND d_year 2401 IN ( 2402 2000, 2403 2000 + 1, 2404 2000 + 2, 2405 2000 + 3 2406 ) 2407 GROUP BY 2408 c_customer_sk 2409 ) 2410 ), 2411 best_ss_customer 2412 AS ( 2413 SELECT 2414 c_customer_sk, 2415 sum(ss_quantity * ss_sales_price) AS ssales 2416 FROM 2417 store_sales, customer 2418 WHERE 2419 ss_customer_sk = c_customer_sk 2420 GROUP BY 2421 c_customer_sk 2422 HAVING 2423 sum(ss_quantity * ss_sales_price) 2424 > 95 / 100.0 2425 * (SELECT * FROM max_store_sales) 2426 ) 2427 SELECT 2428 sum(sales) 2429 FROM 2430 ( 2431 SELECT 2432 cs_quantity * cs_list_price AS sales 2433 FROM 2434 catalog_sales, date_dim 2435 WHERE 2436 d_year = 2000 2437 AND d_moy = 7 2438 AND cs_sold_date_sk = d_date_sk 2439 AND cs_item_sk 2440 IN (SELECT item_sk FROM frequent_ss_items) 2441 AND cs_bill_customer_sk 2442 IN ( 2443 SELECT 2444 c_customer_sk 2445 FROM 2446 best_ss_customer 2447 ) 2448 UNION ALL 2449 SELECT 2450 ws_quantity * ws_list_price AS sales 2451 FROM 2452 web_sales, date_dim 2453 WHERE 2454 d_year = 2000 2455 AND d_moy = 7 2456 AND ws_sold_date_sk = d_date_sk 2457 AND ws_item_sk 2458 IN ( 2459 SELECT 2460 item_sk 2461 FROM 2462 frequent_ss_items 2463 ) 2464 AND ws_bill_customer_sk 2465 IN ( 2466 SELECT 2467 c_customer_sk 2468 FROM 2469 best_ss_customer 2470 ) 2471 ) 2472 LIMIT 2473 100; 2474 WITH 2475 frequent_ss_items 2476 AS ( 2477 SELECT 2478 substr(i_item_desc, 1, 30) AS itemdesc, 2479 i_item_sk AS item_sk, 2480 d_date AS solddate, 2481 count(*) AS cnt 2482 FROM 2483 store_sales, date_dim, item 2484 WHERE 2485 ss_sold_date_sk = d_date_sk 2486 AND ss_item_sk = i_item_sk 2487 AND d_year 2488 IN (2000, 2000 + 1, 2000 + 2, 2000 + 3) 2489 GROUP BY 2490 substr(i_item_desc, 1, 30), 2491 i_item_sk, 2492 d_date 2493 HAVING 2494 count(*) > 4 2495 ), 2496 max_store_sales 2497 AS ( 2498 SELECT 2499 max(csales) AS tpcds_cmax 2500 FROM 2501 ( 2502 SELECT 2503 c_customer_sk, 2504 sum(ss_quantity * ss_sales_price) 2505 AS csales 2506 FROM 2507 store_sales, customer, date_dim 2508 WHERE 2509 ss_customer_sk = c_customer_sk 2510 AND ss_sold_date_sk = d_date_sk 2511 AND d_year 2512 IN ( 2513 2000, 2514 2000 + 1, 2515 2000 + 2, 2516 2000 + 3 2517 ) 2518 GROUP BY 2519 c_customer_sk 2520 ) 2521 ), 2522 best_ss_customer 2523 AS ( 2524 SELECT 2525 c_customer_sk, 2526 sum(ss_quantity * ss_sales_price) AS ssales 2527 FROM 2528 store_sales, customer 2529 WHERE 2530 ss_customer_sk = c_customer_sk 2531 GROUP BY 2532 c_customer_sk 2533 HAVING 2534 sum(ss_quantity * ss_sales_price) 2535 > 95 / 100.0 2536 * (SELECT * FROM max_store_sales) 2537 ) 2538 SELECT 2539 c_last_name, c_first_name, sales 2540 FROM 2541 ( 2542 SELECT 2543 c_last_name, 2544 c_first_name, 2545 sum(cs_quantity * cs_list_price) AS sales 2546 FROM 2547 catalog_sales, customer, date_dim 2548 WHERE 2549 d_year = 2000 2550 AND d_moy = 7 2551 AND cs_sold_date_sk = d_date_sk 2552 AND cs_item_sk 2553 IN (SELECT item_sk FROM frequent_ss_items) 2554 AND cs_bill_customer_sk 2555 IN ( 2556 SELECT 2557 c_customer_sk 2558 FROM 2559 best_ss_customer 2560 ) 2561 AND cs_bill_customer_sk = c_customer_sk 2562 GROUP BY 2563 c_last_name, c_first_name 2564 UNION ALL 2565 SELECT 2566 c_last_name, 2567 c_first_name, 2568 sum(ws_quantity * ws_list_price) AS sales 2569 FROM 2570 web_sales, customer, date_dim 2571 WHERE 2572 d_year = 2000 2573 AND d_moy = 7 2574 AND ws_sold_date_sk = d_date_sk 2575 AND ws_item_sk 2576 IN ( 2577 SELECT 2578 item_sk 2579 FROM 2580 frequent_ss_items 2581 ) 2582 AND ws_bill_customer_sk 2583 IN ( 2584 SELECT 2585 c_customer_sk 2586 FROM 2587 best_ss_customer 2588 ) 2589 AND ws_bill_customer_sk = c_customer_sk 2590 GROUP BY 2591 c_last_name, c_first_name 2592 ) 2593 ORDER BY 2594 c_last_name, c_first_name, sales 2595 LIMIT 2596 100; 2597 ` 2598 2599 query24 = ` 2600 WITH 2601 ssales 2602 AS ( 2603 SELECT 2604 c_last_name, 2605 c_first_name, 2606 s_store_name, 2607 ca_state, 2608 s_state, 2609 i_color, 2610 i_current_price, 2611 i_manager_id, 2612 i_units, 2613 i_size, 2614 sum(ss_net_paid) AS netpaid 2615 FROM 2616 store_sales, 2617 store_returns, 2618 store, 2619 item, 2620 customer, 2621 customer_address 2622 WHERE 2623 ss_ticket_number = sr_ticket_number 2624 AND ss_item_sk = sr_item_sk 2625 AND ss_customer_sk = c_customer_sk 2626 AND ss_item_sk = i_item_sk 2627 AND ss_store_sk = s_store_sk 2628 AND c_current_addr_sk = ca_address_sk 2629 AND c_birth_country != upper(ca_country) 2630 AND s_zip = ca_zip 2631 AND s_market_id = 5 2632 GROUP BY 2633 c_last_name, 2634 c_first_name, 2635 s_store_name, 2636 ca_state, 2637 s_state, 2638 i_color, 2639 i_current_price, 2640 i_manager_id, 2641 i_units, 2642 i_size 2643 ) 2644 SELECT 2645 c_last_name, 2646 c_first_name, 2647 s_store_name, 2648 sum(netpaid) AS paid 2649 FROM 2650 ssales 2651 WHERE 2652 i_color = 'aquamarine' 2653 GROUP BY 2654 c_last_name, c_first_name, s_store_name 2655 HAVING 2656 sum(netpaid) > (SELECT 0.05 * avg(netpaid) FROM ssales) 2657 ORDER BY 2658 c_last_name, c_first_name, s_store_name; 2659 WITH 2660 ssales 2661 AS ( 2662 SELECT 2663 c_last_name, 2664 c_first_name, 2665 s_store_name, 2666 ca_state, 2667 s_state, 2668 i_color, 2669 i_current_price, 2670 i_manager_id, 2671 i_units, 2672 i_size, 2673 sum(ss_net_paid) AS netpaid 2674 FROM 2675 store_sales, 2676 store_returns, 2677 store, 2678 item, 2679 customer, 2680 customer_address 2681 WHERE 2682 ss_ticket_number = sr_ticket_number 2683 AND ss_item_sk = sr_item_sk 2684 AND ss_customer_sk = c_customer_sk 2685 AND ss_item_sk = i_item_sk 2686 AND ss_store_sk = s_store_sk 2687 AND c_current_addr_sk = ca_address_sk 2688 AND c_birth_country != upper(ca_country) 2689 AND s_zip = ca_zip 2690 AND s_market_id = 5 2691 GROUP BY 2692 c_last_name, 2693 c_first_name, 2694 s_store_name, 2695 ca_state, 2696 s_state, 2697 i_color, 2698 i_current_price, 2699 i_manager_id, 2700 i_units, 2701 i_size 2702 ) 2703 SELECT 2704 c_last_name, 2705 c_first_name, 2706 s_store_name, 2707 sum(netpaid) AS paid 2708 FROM 2709 ssales 2710 WHERE 2711 i_color = 'seashell' 2712 GROUP BY 2713 c_last_name, c_first_name, s_store_name 2714 HAVING 2715 sum(netpaid) > (SELECT 0.05 * avg(netpaid) FROM ssales) 2716 ORDER BY 2717 c_last_name, c_first_name, s_store_name; 2718 ` 2719 2720 query25 = ` 2721 SELECT 2722 i_item_id, 2723 i_item_desc, 2724 s_store_id, 2725 s_store_name, 2726 max(ss_net_profit) AS store_sales_profit, 2727 max(sr_net_loss) AS store_returns_loss, 2728 max(cs_net_profit) AS catalog_sales_profit 2729 FROM 2730 store_sales, 2731 store_returns, 2732 catalog_sales, 2733 date_dim AS d1, 2734 date_dim AS d2, 2735 date_dim AS d3, 2736 store, 2737 item 2738 WHERE 2739 d1.d_moy = 4 2740 AND d1.d_year = 1999 2741 AND d1.d_date_sk = ss_sold_date_sk 2742 AND i_item_sk = ss_item_sk 2743 AND s_store_sk = ss_store_sk 2744 AND ss_customer_sk = sr_customer_sk 2745 AND ss_item_sk = sr_item_sk 2746 AND ss_ticket_number = sr_ticket_number 2747 AND sr_returned_date_sk = d2.d_date_sk 2748 AND d2.d_moy BETWEEN 4 AND 10 2749 AND d2.d_year = 1999 2750 AND sr_customer_sk = cs_bill_customer_sk 2751 AND sr_item_sk = cs_item_sk 2752 AND cs_sold_date_sk = d3.d_date_sk 2753 AND d3.d_moy BETWEEN 4 AND 10 2754 AND d3.d_year = 1999 2755 GROUP BY 2756 i_item_id, i_item_desc, s_store_id, s_store_name 2757 ORDER BY 2758 i_item_id, i_item_desc, s_store_id, s_store_name 2759 LIMIT 2760 100; 2761 ` 2762 2763 query26 = ` 2764 SELECT 2765 i_item_id, 2766 avg(cs_quantity) AS agg1, 2767 avg(cs_list_price) AS agg2, 2768 avg(cs_coupon_amt) AS agg3, 2769 avg(cs_sales_price) AS agg4 2770 FROM 2771 catalog_sales, 2772 customer_demographics, 2773 date_dim, 2774 item, 2775 promotion 2776 WHERE 2777 cs_sold_date_sk = d_date_sk 2778 AND cs_item_sk = i_item_sk 2779 AND cs_bill_cdemo_sk = cd_demo_sk 2780 AND cs_promo_sk = p_promo_sk 2781 AND cd_gender = 'M' 2782 AND cd_marital_status = 'W' 2783 AND cd_education_status = 'Unknown' 2784 AND (p_channel_email = 'N' OR p_channel_event = 'N') 2785 AND d_year = 2002 2786 GROUP BY 2787 i_item_id 2788 ORDER BY 2789 i_item_id 2790 LIMIT 2791 100; 2792 ` 2793 2794 // TODO(yuzefovich): modify it to be parsed by CRDB. 2795 query27 = ` 2796 select i_item_id, 2797 s_state, grouping(s_state) g_state, 2798 avg(ss_quantity) agg1, 2799 avg(ss_list_price) agg2, 2800 avg(ss_coupon_amt) agg3, 2801 avg(ss_sales_price) agg4 2802 from store_sales, customer_demographics, date_dim, store, item 2803 where ss_sold_date_sk = d_date_sk and 2804 ss_item_sk = i_item_sk and 2805 ss_store_sk = s_store_sk and 2806 ss_cdemo_sk = cd_demo_sk and 2807 cd_gender = 'M' and 2808 cd_marital_status = 'W' and 2809 cd_education_status = 'Secondary' and 2810 d_year = 1999 and 2811 s_state in ('TN','TN', 'TN', 'TN', 'TN', 'TN') 2812 group by rollup (i_item_id, s_state) 2813 order by i_item_id 2814 ,s_state 2815 limit 100; 2816 ` 2817 2818 query28 = ` 2819 SELECT 2820 * 2821 FROM 2822 ( 2823 SELECT 2824 avg(ss_list_price) AS b1_lp, 2825 count(ss_list_price) AS b1_cnt, 2826 count(DISTINCT ss_list_price) AS b1_cntd 2827 FROM 2828 store_sales 2829 WHERE 2830 ss_quantity BETWEEN 0 AND 5 2831 AND ( 2832 ss_list_price BETWEEN 107 AND (107 + 10) 2833 OR ss_coupon_amt BETWEEN 1319 AND (1319 + 1000) 2834 OR ss_wholesale_cost BETWEEN 60 AND (60 + 20) 2835 ) 2836 ) 2837 AS b1, 2838 ( 2839 SELECT 2840 avg(ss_list_price) AS b2_lp, 2841 count(ss_list_price) AS b2_cnt, 2842 count(DISTINCT ss_list_price) AS b2_cntd 2843 FROM 2844 store_sales 2845 WHERE 2846 ss_quantity BETWEEN 6 AND 10 2847 AND ( 2848 ss_list_price BETWEEN 23 AND (23 + 10) 2849 OR ss_coupon_amt BETWEEN 825 AND (825 + 1000) 2850 OR ss_wholesale_cost BETWEEN 43 AND (43 + 20) 2851 ) 2852 ) 2853 AS b2, 2854 ( 2855 SELECT 2856 avg(ss_list_price) AS b3_lp, 2857 count(ss_list_price) AS b3_cnt, 2858 count(DISTINCT ss_list_price) AS b3_cntd 2859 FROM 2860 store_sales 2861 WHERE 2862 ss_quantity BETWEEN 11 AND 15 2863 AND ( 2864 ss_list_price BETWEEN 74 AND (74 + 10) 2865 OR ss_coupon_amt BETWEEN 4381 AND (4381 + 1000) 2866 OR ss_wholesale_cost BETWEEN 57 AND (57 + 20) 2867 ) 2868 ) 2869 AS b3, 2870 ( 2871 SELECT 2872 avg(ss_list_price) AS b4_lp, 2873 count(ss_list_price) AS b4_cnt, 2874 count(DISTINCT ss_list_price) AS b4_cntd 2875 FROM 2876 store_sales 2877 WHERE 2878 ss_quantity BETWEEN 16 AND 20 2879 AND ( 2880 ss_list_price BETWEEN 89 AND (89 + 10) 2881 OR ss_coupon_amt BETWEEN 3117 AND (3117 + 1000) 2882 OR ss_wholesale_cost BETWEEN 68 AND (68 + 20) 2883 ) 2884 ) 2885 AS b4, 2886 ( 2887 SELECT 2888 avg(ss_list_price) AS b5_lp, 2889 count(ss_list_price) AS b5_cnt, 2890 count(DISTINCT ss_list_price) AS b5_cntd 2891 FROM 2892 store_sales 2893 WHERE 2894 ss_quantity BETWEEN 21 AND 25 2895 AND ( 2896 ss_list_price BETWEEN 58 AND (58 + 10) 2897 OR ss_coupon_amt BETWEEN 9402 AND (9402 + 1000) 2898 OR ss_wholesale_cost BETWEEN 38 AND (38 + 20) 2899 ) 2900 ) 2901 AS b5, 2902 ( 2903 SELECT 2904 avg(ss_list_price) AS b6_lp, 2905 count(ss_list_price) AS b6_cnt, 2906 count(DISTINCT ss_list_price) AS b6_cntd 2907 FROM 2908 store_sales 2909 WHERE 2910 ss_quantity BETWEEN 26 AND 30 2911 AND ( 2912 ss_list_price BETWEEN 64 AND (64 + 10) 2913 OR ss_coupon_amt BETWEEN 5792 AND (5792 + 1000) 2914 OR ss_wholesale_cost BETWEEN 73 AND (73 + 20) 2915 ) 2916 ) 2917 AS b6 2918 LIMIT 2919 100; 2920 ` 2921 2922 query29 = ` 2923 SELECT 2924 i_item_id, 2925 i_item_desc, 2926 s_store_id, 2927 s_store_name, 2928 max(ss_quantity) AS store_sales_quantity, 2929 max(sr_return_quantity) AS store_returns_quantity, 2930 max(cs_quantity) AS catalog_sales_quantity 2931 FROM 2932 store_sales, 2933 store_returns, 2934 catalog_sales, 2935 date_dim AS d1, 2936 date_dim AS d2, 2937 date_dim AS d3, 2938 store, 2939 item 2940 WHERE 2941 d1.d_moy = 4 2942 AND d1.d_year = 1998 2943 AND d1.d_date_sk = ss_sold_date_sk 2944 AND i_item_sk = ss_item_sk 2945 AND s_store_sk = ss_store_sk 2946 AND ss_customer_sk = sr_customer_sk 2947 AND ss_item_sk = sr_item_sk 2948 AND ss_ticket_number = sr_ticket_number 2949 AND sr_returned_date_sk = d2.d_date_sk 2950 AND d2.d_moy BETWEEN 4 AND (4 + 3) 2951 AND d2.d_year = 1998 2952 AND sr_customer_sk = cs_bill_customer_sk 2953 AND sr_item_sk = cs_item_sk 2954 AND cs_sold_date_sk = d3.d_date_sk 2955 AND d3.d_year IN (1998, 1998 + 1, 1998 + 2) 2956 GROUP BY 2957 i_item_id, i_item_desc, s_store_id, s_store_name 2958 ORDER BY 2959 i_item_id, i_item_desc, s_store_id, s_store_name 2960 LIMIT 2961 100; 2962 ` 2963 2964 query30 = ` 2965 WITH 2966 customer_total_return 2967 AS ( 2968 SELECT 2969 wr_returning_customer_sk AS ctr_customer_sk, 2970 ca_state AS ctr_state, 2971 sum(wr_return_amt) AS ctr_total_return 2972 FROM 2973 web_returns, date_dim, customer_address 2974 WHERE 2975 wr_returned_date_sk = d_date_sk 2976 AND d_year = 2000 2977 AND wr_returning_addr_sk = ca_address_sk 2978 GROUP BY 2979 wr_returning_customer_sk, ca_state 2980 ) 2981 SELECT 2982 c_customer_id, 2983 c_salutation, 2984 c_first_name, 2985 c_last_name, 2986 c_preferred_cust_flag, 2987 c_birth_day, 2988 c_birth_month, 2989 c_birth_year, 2990 c_birth_country, 2991 c_login, 2992 c_email_address, 2993 c_last_review_date_sk, 2994 ctr_total_return 2995 FROM 2996 customer_total_return AS ctr1, 2997 customer_address, 2998 customer 2999 WHERE 3000 ctr1.ctr_total_return 3001 > ( 3002 SELECT 3003 avg(ctr_total_return) * 1.2 3004 FROM 3005 customer_total_return AS ctr2 3006 WHERE 3007 ctr1.ctr_state = ctr2.ctr_state 3008 ) 3009 AND ca_address_sk = c_current_addr_sk 3010 AND ca_state = 'AR' 3011 AND ctr1.ctr_customer_sk = c_customer_sk 3012 ORDER BY 3013 c_customer_id, 3014 c_salutation, 3015 c_first_name, 3016 c_last_name, 3017 c_preferred_cust_flag, 3018 c_birth_day, 3019 c_birth_month, 3020 c_birth_year, 3021 c_birth_country, 3022 c_login, 3023 c_email_address, 3024 c_last_review_date_sk, 3025 ctr_total_return 3026 LIMIT 3027 100; 3028 ` 3029 3030 query31 = ` 3031 WITH 3032 ss 3033 AS ( 3034 SELECT 3035 ca_county, 3036 d_qoy, 3037 d_year, 3038 sum(ss_ext_sales_price) AS store_sales 3039 FROM 3040 store_sales, date_dim, customer_address 3041 WHERE 3042 ss_sold_date_sk = d_date_sk 3043 AND ss_addr_sk = ca_address_sk 3044 GROUP BY 3045 ca_county, d_qoy, d_year 3046 ), 3047 ws 3048 AS ( 3049 SELECT 3050 ca_county, 3051 d_qoy, 3052 d_year, 3053 sum(ws_ext_sales_price) AS web_sales 3054 FROM 3055 web_sales, date_dim, customer_address 3056 WHERE 3057 ws_sold_date_sk = d_date_sk 3058 AND ws_bill_addr_sk = ca_address_sk 3059 GROUP BY 3060 ca_county, d_qoy, d_year 3061 ) 3062 SELECT 3063 ss1.ca_county, 3064 ss1.d_year, 3065 ws2.web_sales / ws1.web_sales AS web_q1_q2_increase, 3066 ss2.store_sales / ss1.store_sales 3067 AS store_q1_q2_increase, 3068 ws3.web_sales / ws2.web_sales AS web_q2_q3_increase, 3069 ss3.store_sales / ss2.store_sales 3070 AS store_q2_q3_increase 3071 FROM 3072 ss AS ss1, 3073 ss AS ss2, 3074 ss AS ss3, 3075 ws AS ws1, 3076 ws AS ws2, 3077 ws AS ws3 3078 WHERE 3079 ss1.d_qoy = 1 3080 AND ss1.d_year = 1999 3081 AND ss1.ca_county = ss2.ca_county 3082 AND ss2.d_qoy = 2 3083 AND ss2.d_year = 1999 3084 AND ss2.ca_county = ss3.ca_county 3085 AND ss3.d_qoy = 3 3086 AND ss3.d_year = 1999 3087 AND ss1.ca_county = ws1.ca_county 3088 AND ws1.d_qoy = 1 3089 AND ws1.d_year = 1999 3090 AND ws1.ca_county = ws2.ca_county 3091 AND ws2.d_qoy = 2 3092 AND ws2.d_year = 1999 3093 AND ws1.ca_county = ws3.ca_county 3094 AND ws3.d_qoy = 3 3095 AND ws3.d_year = 1999 3096 AND CASE 3097 WHEN ws1.web_sales > 0 3098 THEN ws2.web_sales / ws1.web_sales 3099 ELSE NULL 3100 END 3101 > CASE 3102 WHEN ss1.store_sales > 0 3103 THEN ss2.store_sales / ss1.store_sales 3104 ELSE NULL 3105 END 3106 AND CASE 3107 WHEN ws2.web_sales > 0 3108 THEN ws3.web_sales / ws2.web_sales 3109 ELSE NULL 3110 END 3111 > CASE 3112 WHEN ss2.store_sales > 0 3113 THEN ss3.store_sales / ss2.store_sales 3114 ELSE NULL 3115 END 3116 ORDER BY 3117 store_q2_q3_increase; 3118 ` 3119 3120 // NOTE: I added conversion of 90 days to an interval. 3121 query32 = ` 3122 SELECT 3123 sum(cs_ext_discount_amt) AS "excess discount amount" 3124 FROM 3125 catalog_sales, item, date_dim 3126 WHERE 3127 i_manufact_id = 722 3128 AND i_item_sk = cs_item_sk 3129 AND d_date BETWEEN '2001-03-09' AND (CAST('2001-03-09' AS DATE) + '90 days'::INTERVAL) 3130 AND d_date_sk = cs_sold_date_sk 3131 AND cs_ext_discount_amt 3132 > ( 3133 SELECT 3134 1.3 * avg(cs_ext_discount_amt) 3135 FROM 3136 catalog_sales, date_dim 3137 WHERE 3138 cs_item_sk = i_item_sk 3139 AND d_date BETWEEN '2001-03-09' AND (CAST('2001-03-09' AS DATE) + '90 days'::INTERVAL) 3140 AND d_date_sk = cs_sold_date_sk 3141 ) 3142 LIMIT 3143 100; 3144 ` 3145 3146 query33 = ` 3147 WITH 3148 ss 3149 AS ( 3150 SELECT 3151 i_manufact_id, 3152 sum(ss_ext_sales_price) AS total_sales 3153 FROM 3154 store_sales, 3155 date_dim, 3156 customer_address, 3157 item 3158 WHERE 3159 i_manufact_id 3160 IN ( 3161 SELECT 3162 i_manufact_id 3163 FROM 3164 item 3165 WHERE 3166 i_category IN ('Books',) 3167 ) 3168 AND ss_item_sk = i_item_sk 3169 AND ss_sold_date_sk = d_date_sk 3170 AND d_year = 2001 3171 AND d_moy = 3 3172 AND ss_addr_sk = ca_address_sk 3173 AND ca_gmt_offset = -5 3174 GROUP BY 3175 i_manufact_id 3176 ), 3177 cs 3178 AS ( 3179 SELECT 3180 i_manufact_id, 3181 sum(cs_ext_sales_price) AS total_sales 3182 FROM 3183 catalog_sales, 3184 date_dim, 3185 customer_address, 3186 item 3187 WHERE 3188 i_manufact_id 3189 IN ( 3190 SELECT 3191 i_manufact_id 3192 FROM 3193 item 3194 WHERE 3195 i_category IN ('Books',) 3196 ) 3197 AND cs_item_sk = i_item_sk 3198 AND cs_sold_date_sk = d_date_sk 3199 AND d_year = 2001 3200 AND d_moy = 3 3201 AND cs_bill_addr_sk = ca_address_sk 3202 AND ca_gmt_offset = -5 3203 GROUP BY 3204 i_manufact_id 3205 ), 3206 ws 3207 AS ( 3208 SELECT 3209 i_manufact_id, 3210 sum(ws_ext_sales_price) AS total_sales 3211 FROM 3212 web_sales, date_dim, customer_address, item 3213 WHERE 3214 i_manufact_id 3215 IN ( 3216 SELECT 3217 i_manufact_id 3218 FROM 3219 item 3220 WHERE 3221 i_category IN ('Books',) 3222 ) 3223 AND ws_item_sk = i_item_sk 3224 AND ws_sold_date_sk = d_date_sk 3225 AND d_year = 2001 3226 AND d_moy = 3 3227 AND ws_bill_addr_sk = ca_address_sk 3228 AND ca_gmt_offset = -5 3229 GROUP BY 3230 i_manufact_id 3231 ) 3232 SELECT 3233 i_manufact_id, sum(total_sales) AS total_sales 3234 FROM 3235 ( 3236 SELECT * FROM ss UNION ALL SELECT * FROM cs 3237 UNION ALL SELECT * FROM ws 3238 ) 3239 AS tmp1 3240 GROUP BY 3241 i_manufact_id 3242 ORDER BY 3243 total_sales 3244 LIMIT 3245 100; 3246 ` 3247 3248 query34 = ` 3249 SELECT 3250 c_last_name, 3251 c_first_name, 3252 c_salutation, 3253 c_preferred_cust_flag, 3254 ss_ticket_number, 3255 cnt 3256 FROM 3257 ( 3258 SELECT 3259 ss_ticket_number, 3260 ss_customer_sk, 3261 count(*) AS cnt 3262 FROM 3263 store_sales, 3264 date_dim, 3265 store, 3266 household_demographics 3267 WHERE 3268 store_sales.ss_sold_date_sk = date_dim.d_date_sk 3269 AND store_sales.ss_store_sk = store.s_store_sk 3270 AND store_sales.ss_hdemo_sk 3271 = household_demographics.hd_demo_sk 3272 AND ( 3273 date_dim.d_dom BETWEEN 1 AND 3 3274 OR date_dim.d_dom BETWEEN 25 AND 28 3275 ) 3276 AND ( 3277 household_demographics.hd_buy_potential 3278 = '1001-5000' 3279 OR household_demographics.hd_buy_potential 3280 = '0-500' 3281 ) 3282 AND household_demographics.hd_vehicle_count > 0 3283 AND ( 3284 CASE 3285 WHEN household_demographics.hd_vehicle_count 3286 > 0 3287 THEN household_demographics.hd_dep_count 3288 / household_demographics.hd_vehicle_count 3289 ELSE NULL 3290 END 3291 ) 3292 > 1.2 3293 AND date_dim.d_year 3294 IN (2000, 2000 + 1, 2000 + 2) 3295 AND store.s_county 3296 IN ( 3297 'Williamson County', 3298 'Williamson County', 3299 'Williamson County', 3300 'Williamson County', 3301 'Williamson County', 3302 'Williamson County', 3303 'Williamson County', 3304 'Williamson County' 3305 ) 3306 GROUP BY 3307 ss_ticket_number, ss_customer_sk 3308 ) 3309 AS dn, 3310 customer 3311 WHERE 3312 ss_customer_sk = c_customer_sk AND cnt BETWEEN 15 AND 20 3313 ORDER BY 3314 c_last_name, 3315 c_first_name, 3316 c_salutation, 3317 c_preferred_cust_flag DESC, 3318 ss_ticket_number; 3319 ` 3320 3321 query35 = ` 3322 SELECT 3323 ca_state, 3324 cd_gender, 3325 cd_marital_status, 3326 cd_dep_count, 3327 count(*) AS cnt1, 3328 avg(cd_dep_count), 3329 stddev_samp(cd_dep_count), 3330 sum(cd_dep_count), 3331 cd_dep_employed_count, 3332 count(*) AS cnt2, 3333 avg(cd_dep_employed_count), 3334 stddev_samp(cd_dep_employed_count), 3335 sum(cd_dep_employed_count), 3336 cd_dep_college_count, 3337 count(*) AS cnt3, 3338 avg(cd_dep_college_count), 3339 stddev_samp(cd_dep_college_count), 3340 sum(cd_dep_college_count) 3341 FROM 3342 customer AS c, 3343 customer_address AS ca, 3344 customer_demographics 3345 WHERE 3346 c.c_current_addr_sk = ca.ca_address_sk 3347 AND cd_demo_sk = c.c_current_cdemo_sk 3348 AND EXISTS( 3349 SELECT 3350 * 3351 FROM 3352 store_sales, date_dim 3353 WHERE 3354 c.c_customer_sk = ss_customer_sk 3355 AND ss_sold_date_sk = d_date_sk 3356 AND d_year = 1999 3357 AND d_qoy < 4 3358 ) 3359 AND ( 3360 EXISTS( 3361 SELECT 3362 * 3363 FROM 3364 web_sales, date_dim 3365 WHERE 3366 c.c_customer_sk = ws_bill_customer_sk 3367 AND ws_sold_date_sk = d_date_sk 3368 AND d_year = 1999 3369 AND d_qoy < 4 3370 ) 3371 OR EXISTS( 3372 SELECT 3373 * 3374 FROM 3375 catalog_sales, date_dim 3376 WHERE 3377 c.c_customer_sk 3378 = cs_ship_customer_sk 3379 AND cs_sold_date_sk = d_date_sk 3380 AND d_year = 1999 3381 AND d_qoy < 4 3382 ) 3383 ) 3384 GROUP BY 3385 ca_state, 3386 cd_gender, 3387 cd_marital_status, 3388 cd_dep_count, 3389 cd_dep_employed_count, 3390 cd_dep_college_count 3391 ORDER BY 3392 ca_state, 3393 cd_gender, 3394 cd_marital_status, 3395 cd_dep_count, 3396 cd_dep_employed_count, 3397 cd_dep_college_count 3398 LIMIT 3399 100; 3400 ` 3401 3402 // TODO(yuzefovich): modify it to be parsed by CRDB. 3403 query36 = ` 3404 select 3405 sum(ss_net_profit)/sum(ss_ext_sales_price) as gross_margin 3406 ,i_category 3407 ,i_class 3408 ,grouping(i_category)+grouping(i_class) as lochierarchy 3409 ,rank() over ( 3410 partition by grouping(i_category)+grouping(i_class), 3411 case when grouping(i_class) = 0 then i_category end 3412 order by sum(ss_net_profit)/sum(ss_ext_sales_price) asc) as rank_within_parent 3413 from 3414 store_sales 3415 ,date_dim d1 3416 ,item 3417 ,store 3418 where 3419 d1.d_year = 2000 3420 and d1.d_date_sk = ss_sold_date_sk 3421 and i_item_sk = ss_item_sk 3422 and s_store_sk = ss_store_sk 3423 and s_state in ('TN','TN','TN','TN', 3424 'TN','TN','TN','TN') 3425 group by rollup(i_category,i_class) 3426 order by 3427 lochierarchy desc 3428 ,case when lochierarchy = 0 then i_category end 3429 ,rank_within_parent 3430 limit 100; 3431 ` 3432 3433 // NOTE: I added conversion of 90 days to an interval. 3434 query37 = ` 3435 SELECT 3436 i_item_id, i_item_desc, i_current_price 3437 FROM 3438 item, inventory, date_dim, catalog_sales 3439 WHERE 3440 i_current_price BETWEEN 29 AND (29 + 30) 3441 AND inv_item_sk = i_item_sk 3442 AND d_date_sk = inv_date_sk 3443 AND d_date BETWEEN CAST('2002-03-29' AS DATE) AND (CAST('2002-03-29' AS DATE) + '60 days'::INTERVAL) 3444 AND i_manufact_id IN (705, 742, 777, 944) 3445 AND inv_quantity_on_hand BETWEEN 100 AND 500 3446 AND cs_item_sk = i_item_sk 3447 GROUP BY 3448 i_item_id, i_item_desc, i_current_price 3449 ORDER BY 3450 i_item_id 3451 LIMIT 3452 100; 3453 ` 3454 3455 query38 = ` 3456 SELECT 3457 count(*) 3458 FROM 3459 ( 3460 SELECT 3461 DISTINCT c_last_name, c_first_name, d_date 3462 FROM 3463 store_sales, date_dim, customer 3464 WHERE 3465 store_sales.ss_sold_date_sk = date_dim.d_date_sk 3466 AND store_sales.ss_customer_sk 3467 = customer.c_customer_sk 3468 AND d_month_seq BETWEEN 1189 AND (1189 + 11) 3469 INTERSECT 3470 SELECT 3471 DISTINCT c_last_name, c_first_name, d_date 3472 FROM 3473 catalog_sales, date_dim, customer 3474 WHERE 3475 catalog_sales.cs_sold_date_sk 3476 = date_dim.d_date_sk 3477 AND catalog_sales.cs_bill_customer_sk 3478 = customer.c_customer_sk 3479 AND d_month_seq BETWEEN 1189 AND (1189 + 11) 3480 INTERSECT 3481 SELECT 3482 DISTINCT c_last_name, c_first_name, d_date 3483 FROM 3484 web_sales, date_dim, customer 3485 WHERE 3486 web_sales.ws_sold_date_sk 3487 = date_dim.d_date_sk 3488 AND web_sales.ws_bill_customer_sk 3489 = customer.c_customer_sk 3490 AND d_month_seq BETWEEN 1189 AND (1189 + 11) 3491 ) 3492 AS hot_cust 3493 LIMIT 3494 100; 3495 ` 3496 3497 query39 = ` 3498 WITH 3499 inv 3500 AS ( 3501 SELECT 3502 w_warehouse_name, 3503 w_warehouse_sk, 3504 i_item_sk, 3505 d_moy, 3506 stdev, 3507 mean, 3508 CASE mean 3509 WHEN 0 THEN NULL 3510 ELSE stdev / mean 3511 END 3512 AS cov 3513 FROM 3514 ( 3515 SELECT 3516 w_warehouse_name, 3517 w_warehouse_sk, 3518 i_item_sk, 3519 d_moy, 3520 stddev_samp(inv_quantity_on_hand) 3521 AS stdev, 3522 avg(inv_quantity_on_hand) AS mean 3523 FROM 3524 inventory, item, warehouse, date_dim 3525 WHERE 3526 inv_item_sk = i_item_sk 3527 AND inv_warehouse_sk 3528 = w_warehouse_sk 3529 AND inv_date_sk = d_date_sk 3530 AND d_year = 2000 3531 GROUP BY 3532 w_warehouse_name, 3533 w_warehouse_sk, 3534 i_item_sk, 3535 d_moy 3536 ) 3537 AS foo 3538 WHERE 3539 CASE mean 3540 WHEN 0 THEN 0 3541 ELSE stdev / mean 3542 END 3543 > 1 3544 ) 3545 SELECT 3546 inv1.w_warehouse_sk, 3547 inv1.i_item_sk, 3548 inv1.d_moy, 3549 inv1.mean, 3550 inv1.cov, 3551 inv2.w_warehouse_sk, 3552 inv2.i_item_sk, 3553 inv2.d_moy, 3554 inv2.mean, 3555 inv2.cov 3556 FROM 3557 inv AS inv1, inv AS inv2 3558 WHERE 3559 inv1.i_item_sk = inv2.i_item_sk 3560 AND inv1.w_warehouse_sk = inv2.w_warehouse_sk 3561 AND inv1.d_moy = 1 3562 AND inv2.d_moy = 1 + 1 3563 ORDER BY 3564 inv1.w_warehouse_sk, 3565 inv1.i_item_sk, 3566 inv1.d_moy, 3567 inv1.mean, 3568 inv1.cov, 3569 inv2.d_moy, 3570 inv2.mean, 3571 inv2.cov; 3572 WITH 3573 inv 3574 AS ( 3575 SELECT 3576 w_warehouse_name, 3577 w_warehouse_sk, 3578 i_item_sk, 3579 d_moy, 3580 stdev, 3581 mean, 3582 CASE mean 3583 WHEN 0 THEN NULL 3584 ELSE stdev / mean 3585 END 3586 AS cov 3587 FROM 3588 ( 3589 SELECT 3590 w_warehouse_name, 3591 w_warehouse_sk, 3592 i_item_sk, 3593 d_moy, 3594 stddev_samp(inv_quantity_on_hand) 3595 AS stdev, 3596 avg(inv_quantity_on_hand) AS mean 3597 FROM 3598 inventory, item, warehouse, date_dim 3599 WHERE 3600 inv_item_sk = i_item_sk 3601 AND inv_warehouse_sk 3602 = w_warehouse_sk 3603 AND inv_date_sk = d_date_sk 3604 AND d_year = 2000 3605 GROUP BY 3606 w_warehouse_name, 3607 w_warehouse_sk, 3608 i_item_sk, 3609 d_moy 3610 ) 3611 AS foo 3612 WHERE 3613 CASE mean 3614 WHEN 0 THEN 0 3615 ELSE stdev / mean 3616 END 3617 > 1 3618 ) 3619 SELECT 3620 inv1.w_warehouse_sk, 3621 inv1.i_item_sk, 3622 inv1.d_moy, 3623 inv1.mean, 3624 inv1.cov, 3625 inv2.w_warehouse_sk, 3626 inv2.i_item_sk, 3627 inv2.d_moy, 3628 inv2.mean, 3629 inv2.cov 3630 FROM 3631 inv AS inv1, inv AS inv2 3632 WHERE 3633 inv1.i_item_sk = inv2.i_item_sk 3634 AND inv1.w_warehouse_sk = inv2.w_warehouse_sk 3635 AND inv1.d_moy = 1 3636 AND inv2.d_moy = 1 + 1 3637 AND inv1.cov > 1.5 3638 ORDER BY 3639 inv1.w_warehouse_sk, 3640 inv1.i_item_sk, 3641 inv1.d_moy, 3642 inv1.mean, 3643 inv1.cov, 3644 inv2.d_moy, 3645 inv2.mean, 3646 inv2.cov; 3647 ` 3648 3649 // NOTE: I added conversion of 30 days to an interval. 3650 query40 = ` 3651 SELECT 3652 w_state, 3653 i_item_id, 3654 sum( 3655 CASE 3656 WHEN ( 3657 CAST(d_date AS DATE) 3658 < CAST('2001-05-02' AS DATE) 3659 ) 3660 THEN cs_sales_price - COALESCE(cr_refunded_cash, 0) 3661 ELSE 0 3662 END 3663 ) 3664 AS sales_before, 3665 sum( 3666 CASE 3667 WHEN ( 3668 CAST(d_date AS DATE) 3669 >= CAST('2001-05-02' AS DATE) 3670 ) 3671 THEN cs_sales_price - COALESCE(cr_refunded_cash, 0) 3672 ELSE 0 3673 END 3674 ) 3675 AS sales_after 3676 FROM 3677 catalog_sales 3678 LEFT JOIN catalog_returns ON 3679 cs_order_number = cr_order_number 3680 AND cs_item_sk = cr_item_sk, 3681 warehouse, 3682 item, 3683 date_dim 3684 WHERE 3685 i_current_price BETWEEN 0.99 AND 1.49 3686 AND i_item_sk = cs_item_sk 3687 AND cs_warehouse_sk = w_warehouse_sk 3688 AND cs_sold_date_sk = d_date_sk 3689 AND d_date BETWEEN (CAST('2001-05-02' AS DATE) - '30 days'::INTERVAL) AND (CAST('2001-05-02' AS DATE) + '30 days'::INTERVAL) 3690 GROUP BY 3691 w_state, i_item_id 3692 ORDER BY 3693 w_state, i_item_id 3694 LIMIT 3695 100; 3696 ` 3697 3698 query41 = ` 3699 SELECT 3700 DISTINCT i_product_name 3701 FROM 3702 item AS i1 3703 WHERE 3704 i_manufact_id BETWEEN 704 AND (704 + 40) 3705 AND ( 3706 SELECT 3707 count(*) AS item_cnt 3708 FROM 3709 item 3710 WHERE 3711 ( 3712 i_manufact = i1.i_manufact 3713 AND ( 3714 ( 3715 i_category = 'Women' 3716 AND ( 3717 i_color = 'forest' 3718 OR i_color = 'lime' 3719 ) 3720 AND ( 3721 i_units = 'Pallet' 3722 OR i_units = 'Pound' 3723 ) 3724 AND ( 3725 i_size = 'economy' 3726 OR i_size = 'small' 3727 ) 3728 ) 3729 OR ( 3730 i_category = 'Women' 3731 AND ( 3732 i_color = 'navy' 3733 OR i_color 3734 = 'slate' 3735 ) 3736 AND ( 3737 i_units 3738 = 'Gross' 3739 OR i_units 3740 = 'Bunch' 3741 ) 3742 AND ( 3743 i_size 3744 = 'extra large' 3745 OR i_size 3746 = 'petite' 3747 ) 3748 ) 3749 OR ( 3750 i_category = 'Men' 3751 AND ( 3752 i_color 3753 = 'powder' 3754 OR i_color 3755 = 'sky' 3756 ) 3757 AND ( 3758 i_units 3759 = 'Dozen' 3760 OR i_units 3761 = 'Lb' 3762 ) 3763 AND ( 3764 i_size = 'N/A' 3765 OR i_size 3766 = 'large' 3767 ) 3768 ) 3769 OR ( 3770 i_category = 'Men' 3771 AND ( 3772 i_color 3773 = 'maroon' 3774 OR i_color 3775 = 'smoke' 3776 ) 3777 AND ( 3778 i_units 3779 = 'Ounce' 3780 OR i_units 3781 = 'Case' 3782 ) 3783 AND ( 3784 i_size 3785 = 'economy' 3786 OR i_size 3787 = 'small' 3788 ) 3789 ) 3790 ) 3791 ) 3792 OR ( 3793 i_manufact = i1.i_manufact 3794 AND ( 3795 ( 3796 i_category = 'Women' 3797 AND ( 3798 i_color = 'dark' 3799 OR i_color 3800 = 'aquamarine' 3801 ) 3802 AND ( 3803 i_units = 'Ton' 3804 OR i_units 3805 = 'Tbl' 3806 ) 3807 AND ( 3808 i_size 3809 = 'economy' 3810 OR i_size 3811 = 'small' 3812 ) 3813 ) 3814 OR ( 3815 i_category = 'Women' 3816 AND ( 3817 i_color 3818 = 'frosted' 3819 OR i_color 3820 = 'plum' 3821 ) 3822 AND ( 3823 i_units 3824 = 'Dram' 3825 OR i_units 3826 = 'Box' 3827 ) 3828 AND ( 3829 i_size 3830 = 'extra large' 3831 OR i_size 3832 = 'petite' 3833 ) 3834 ) 3835 OR ( 3836 i_category = 'Men' 3837 AND ( 3838 i_color 3839 = 'papaya' 3840 OR i_color 3841 = 'peach' 3842 ) 3843 AND ( 3844 i_units 3845 = 'Bundle' 3846 OR i_units 3847 = 'Carton' 3848 ) 3849 AND ( 3850 i_size 3851 = 'N/A' 3852 OR i_size 3853 = 'large' 3854 ) 3855 ) 3856 OR ( 3857 i_category = 'Men' 3858 AND ( 3859 i_color 3860 = 'firebrick' 3861 OR i_color 3862 = 'sienna' 3863 ) 3864 AND ( 3865 i_units 3866 = 'Cup' 3867 OR i_units 3868 = 'Each' 3869 ) 3870 AND ( 3871 i_size 3872 = 'economy' 3873 OR i_size 3874 = 'small' 3875 ) 3876 ) 3877 ) 3878 ) 3879 ) 3880 > 0 3881 ORDER BY 3882 i_product_name 3883 LIMIT 3884 100; 3885 ` 3886 3887 query42 = ` 3888 SELECT 3889 dt.d_year, 3890 item.i_category_id, 3891 item.i_category, 3892 sum(ss_ext_sales_price) 3893 FROM 3894 date_dim AS dt, store_sales, item 3895 WHERE 3896 dt.d_date_sk = store_sales.ss_sold_date_sk 3897 AND store_sales.ss_item_sk = item.i_item_sk 3898 AND item.i_manager_id = 1 3899 AND dt.d_moy = 11 3900 AND dt.d_year = 1998 3901 GROUP BY 3902 dt.d_year, item.i_category_id, item.i_category 3903 ORDER BY 3904 sum(ss_ext_sales_price) DESC, 3905 dt.d_year, 3906 item.i_category_id, 3907 item.i_category 3908 LIMIT 3909 100; 3910 ` 3911 3912 query43 = ` 3913 SELECT 3914 s_store_name, 3915 s_store_id, 3916 sum( 3917 CASE 3918 WHEN (d_day_name = 'Sunday') THEN ss_sales_price 3919 ELSE NULL 3920 END 3921 ) 3922 AS sun_sales, 3923 sum( 3924 CASE 3925 WHEN (d_day_name = 'Monday') THEN ss_sales_price 3926 ELSE NULL 3927 END 3928 ) 3929 AS mon_sales, 3930 sum( 3931 CASE 3932 WHEN (d_day_name = 'Tuesday') THEN ss_sales_price 3933 ELSE NULL 3934 END 3935 ) 3936 AS tue_sales, 3937 sum( 3938 CASE 3939 WHEN (d_day_name = 'Wednesday') THEN ss_sales_price 3940 ELSE NULL 3941 END 3942 ) 3943 AS wed_sales, 3944 sum( 3945 CASE 3946 WHEN (d_day_name = 'Thursday') THEN ss_sales_price 3947 ELSE NULL 3948 END 3949 ) 3950 AS thu_sales, 3951 sum( 3952 CASE 3953 WHEN (d_day_name = 'Friday') THEN ss_sales_price 3954 ELSE NULL 3955 END 3956 ) 3957 AS fri_sales, 3958 sum( 3959 CASE 3960 WHEN (d_day_name = 'Saturday') THEN ss_sales_price 3961 ELSE NULL 3962 END 3963 ) 3964 AS sat_sales 3965 FROM 3966 date_dim, store_sales, store 3967 WHERE 3968 d_date_sk = ss_sold_date_sk 3969 AND s_store_sk = ss_store_sk 3970 AND s_gmt_offset = -5 3971 AND d_year = 2000 3972 GROUP BY 3973 s_store_name, s_store_id 3974 ORDER BY 3975 s_store_name, 3976 s_store_id, 3977 sun_sales, 3978 mon_sales, 3979 tue_sales, 3980 wed_sales, 3981 thu_sales, 3982 fri_sales, 3983 sat_sales 3984 LIMIT 3985 100; 3986 ` 3987 3988 query44 = ` 3989 SELECT 3990 asceding.rnk, 3991 i1.i_product_name AS best_performing, 3992 i2.i_product_name AS worst_performing 3993 FROM 3994 ( 3995 SELECT 3996 * 3997 FROM 3998 ( 3999 SELECT 4000 item_sk, 4001 rank() OVER (ORDER BY rank_col ASC) 4002 AS rnk 4003 FROM 4004 ( 4005 SELECT 4006 ss_item_sk AS item_sk, 4007 avg(ss_net_profit) AS rank_col 4008 FROM 4009 store_sales AS ss1 4010 WHERE 4011 ss_store_sk = 4 4012 GROUP BY 4013 ss_item_sk 4014 HAVING 4015 avg(ss_net_profit) 4016 > 0.9 4017 * ( 4018 SELECT 4019 avg( 4020 ss_net_profit 4021 ) 4022 AS rank_col 4023 FROM 4024 store_sales 4025 WHERE 4026 ss_store_sk = 4 4027 AND ss_hdemo_sk 4028 IS NULL 4029 GROUP BY 4030 ss_store_sk 4031 ) 4032 ) 4033 AS v1 4034 ) 4035 AS v11 4036 WHERE 4037 rnk < 11 4038 ) 4039 AS asceding, 4040 ( 4041 SELECT 4042 * 4043 FROM 4044 ( 4045 SELECT 4046 item_sk, 4047 rank() OVER (ORDER BY rank_col DESC) 4048 AS rnk 4049 FROM 4050 ( 4051 SELECT 4052 ss_item_sk AS item_sk, 4053 avg(ss_net_profit) AS rank_col 4054 FROM 4055 store_sales AS ss1 4056 WHERE 4057 ss_store_sk = 4 4058 GROUP BY 4059 ss_item_sk 4060 HAVING 4061 avg(ss_net_profit) 4062 > 0.9 4063 * ( 4064 SELECT 4065 avg( 4066 ss_net_profit 4067 ) 4068 AS rank_col 4069 FROM 4070 store_sales 4071 WHERE 4072 ss_store_sk = 4 4073 AND ss_hdemo_sk 4074 IS NULL 4075 GROUP BY 4076 ss_store_sk 4077 ) 4078 ) 4079 AS v2 4080 ) 4081 AS v21 4082 WHERE 4083 rnk < 11 4084 ) 4085 AS descending, 4086 item AS i1, 4087 item AS i2 4088 WHERE 4089 asceding.rnk = descending.rnk 4090 AND i1.i_item_sk = asceding.item_sk 4091 AND i2.i_item_sk = descending.item_sk 4092 ORDER BY 4093 asceding.rnk 4094 LIMIT 4095 100; 4096 ` 4097 4098 query45 = ` 4099 SELECT 4100 ca_zip, ca_city, sum(ws_sales_price) 4101 FROM 4102 web_sales, customer, customer_address, date_dim, item 4103 WHERE 4104 ws_bill_customer_sk = c_customer_sk 4105 AND c_current_addr_sk = ca_address_sk 4106 AND ws_item_sk = i_item_sk 4107 AND ( 4108 substr(ca_zip, 1, 5) 4109 IN ( 4110 '85669', 4111 '86197', 4112 '88274', 4113 '83405', 4114 '86475', 4115 '85392', 4116 '85460', 4117 '80348', 4118 '81792' 4119 ) 4120 OR i_item_id 4121 IN ( 4122 SELECT 4123 i_item_id 4124 FROM 4125 item 4126 WHERE 4127 i_item_sk 4128 IN ( 4129 2, 4130 3, 4131 5, 4132 7, 4133 11, 4134 13, 4135 17, 4136 19, 4137 23, 4138 29 4139 ) 4140 ) 4141 ) 4142 AND ws_sold_date_sk = d_date_sk 4143 AND d_qoy = 1 4144 AND d_year = 2000 4145 GROUP BY 4146 ca_zip, ca_city 4147 ORDER BY 4148 ca_zip, ca_city 4149 LIMIT 4150 100; 4151 ` 4152 4153 query46 = ` 4154 SELECT 4155 c_last_name, 4156 c_first_name, 4157 ca_city, 4158 bought_city, 4159 ss_ticket_number, 4160 amt, 4161 profit 4162 FROM 4163 ( 4164 SELECT 4165 ss_ticket_number, 4166 ss_customer_sk, 4167 ca_city AS bought_city, 4168 sum(ss_coupon_amt) AS amt, 4169 sum(ss_net_profit) AS profit 4170 FROM 4171 store_sales, 4172 date_dim, 4173 store, 4174 household_demographics, 4175 customer_address 4176 WHERE 4177 store_sales.ss_sold_date_sk = date_dim.d_date_sk 4178 AND store_sales.ss_store_sk = store.s_store_sk 4179 AND store_sales.ss_hdemo_sk 4180 = household_demographics.hd_demo_sk 4181 AND store_sales.ss_addr_sk 4182 = customer_address.ca_address_sk 4183 AND ( 4184 household_demographics.hd_dep_count = 8 4185 OR household_demographics.hd_vehicle_count 4186 = 0 4187 ) 4188 AND date_dim.d_dow IN (6, 0) 4189 AND date_dim.d_year 4190 IN (2000, 2000 + 1, 2000 + 2) 4191 AND store.s_city 4192 IN ( 4193 'Midway', 4194 'Fairview', 4195 'Fairview', 4196 'Fairview', 4197 'Fairview' 4198 ) 4199 GROUP BY 4200 ss_ticket_number, 4201 ss_customer_sk, 4202 ss_addr_sk, 4203 ca_city 4204 ) 4205 AS dn, 4206 customer, 4207 customer_address AS current_addr 4208 WHERE 4209 ss_customer_sk = c_customer_sk 4210 AND customer.c_current_addr_sk 4211 = current_addr.ca_address_sk 4212 AND current_addr.ca_city != bought_city 4213 ORDER BY 4214 c_last_name, 4215 c_first_name, 4216 ca_city, 4217 bought_city, 4218 ss_ticket_number 4219 LIMIT 4220 100; 4221 ` 4222 4223 query47 = ` 4224 WITH 4225 v1 4226 AS ( 4227 SELECT 4228 i_category, 4229 i_brand, 4230 s_store_name, 4231 s_company_name, 4232 d_year, 4233 d_moy, 4234 sum(ss_sales_price) AS sum_sales, 4235 avg(sum(ss_sales_price)) OVER ( 4236 PARTITION BY 4237 i_category, 4238 i_brand, 4239 s_store_name, 4240 s_company_name, 4241 d_year 4242 ) 4243 AS avg_monthly_sales, 4244 rank() OVER ( 4245 PARTITION BY 4246 i_category, 4247 i_brand, 4248 s_store_name, 4249 s_company_name 4250 ORDER BY 4251 d_year, d_moy 4252 ) 4253 AS rn 4254 FROM 4255 item, store_sales, date_dim, store 4256 WHERE 4257 ss_item_sk = i_item_sk 4258 AND ss_sold_date_sk = d_date_sk 4259 AND ss_store_sk = s_store_sk 4260 AND ( 4261 d_year = 2000 4262 OR ( 4263 d_year = 2000 - 1 4264 AND d_moy = 12 4265 ) 4266 OR (d_year = 2000 + 1 AND d_moy = 1) 4267 ) 4268 GROUP BY 4269 i_category, 4270 i_brand, 4271 s_store_name, 4272 s_company_name, 4273 d_year, 4274 d_moy 4275 ), 4276 v2 4277 AS ( 4278 SELECT 4279 v1.s_store_name, 4280 v1.s_company_name, 4281 v1.d_year, 4282 v1.avg_monthly_sales, 4283 v1.sum_sales, 4284 v1_lag.sum_sales AS psum, 4285 v1_lead.sum_sales AS nsum 4286 FROM 4287 v1, v1 AS v1_lag, v1 AS v1_lead 4288 WHERE 4289 v1.i_category = v1_lag.i_category 4290 AND v1.i_category = v1_lead.i_category 4291 AND v1.i_brand = v1_lag.i_brand 4292 AND v1.i_brand = v1_lead.i_brand 4293 AND v1.s_store_name = v1_lag.s_store_name 4294 AND v1.s_store_name = v1_lead.s_store_name 4295 AND v1.s_company_name 4296 = v1_lag.s_company_name 4297 AND v1.s_company_name 4298 = v1_lead.s_company_name 4299 AND v1.rn = v1_lag.rn + 1 4300 AND v1.rn = v1_lead.rn - 1 4301 ) 4302 SELECT 4303 * 4304 FROM 4305 v2 4306 WHERE 4307 d_year = 2000 4308 AND avg_monthly_sales > 0 4309 AND CASE 4310 WHEN avg_monthly_sales > 0 4311 THEN abs(sum_sales - avg_monthly_sales) 4312 / avg_monthly_sales 4313 ELSE NULL 4314 END 4315 > 0.1 4316 ORDER BY 4317 sum_sales - avg_monthly_sales, nsum 4318 LIMIT 4319 100; 4320 ` 4321 4322 query48 = ` 4323 SELECT 4324 sum(ss_quantity) 4325 FROM 4326 store_sales, 4327 store, 4328 customer_demographics, 4329 customer_address, 4330 date_dim 4331 WHERE 4332 s_store_sk = ss_store_sk 4333 AND ss_sold_date_sk = d_date_sk 4334 AND d_year = 2001 4335 AND ( 4336 ( 4337 cd_demo_sk = ss_cdemo_sk 4338 AND cd_marital_status = 'S' 4339 AND cd_education_status = 'Secondary' 4340 AND ss_sales_price BETWEEN 100.00 AND 150.00 4341 ) 4342 OR ( 4343 cd_demo_sk = ss_cdemo_sk 4344 AND cd_marital_status = 'M' 4345 AND cd_education_status = '2 yr Degree' 4346 AND ss_sales_price BETWEEN 50.00 AND 100.00 4347 ) 4348 OR ( 4349 cd_demo_sk = ss_cdemo_sk 4350 AND cd_marital_status = 'D' 4351 AND cd_education_status 4352 = 'Advanced Degree' 4353 AND ss_sales_price BETWEEN 150.00 AND 200.00 4354 ) 4355 ) 4356 AND ( 4357 ( 4358 ss_addr_sk = ca_address_sk 4359 AND ca_country = 'United States' 4360 AND ca_state IN ('ND', 'NY', 'SD') 4361 AND ss_net_profit BETWEEN 0 AND 2000 4362 ) 4363 OR ( 4364 ss_addr_sk = ca_address_sk 4365 AND ca_country = 'United States' 4366 AND ca_state IN ('MD', 'GA', 'KS') 4367 AND ss_net_profit BETWEEN 150 AND 3000 4368 ) 4369 OR ( 4370 ss_addr_sk = ca_address_sk 4371 AND ca_country = 'United States' 4372 AND ca_state IN ('CO', 'MN', 'NC') 4373 AND ss_net_profit BETWEEN 50 AND 25000 4374 ) 4375 ); 4376 ` 4377 4378 query49 = ` 4379 SELECT 4380 channel, item, return_ratio, return_rank, currency_rank 4381 FROM 4382 ( 4383 SELECT 4384 'web' AS channel, 4385 web.item, 4386 web.return_ratio, 4387 web.return_rank, 4388 web.currency_rank 4389 FROM 4390 ( 4391 SELECT 4392 item, 4393 return_ratio, 4394 currency_ratio, 4395 rank() OVER (ORDER BY return_ratio) 4396 AS return_rank, 4397 rank() OVER (ORDER BY currency_ratio) 4398 AS currency_rank 4399 FROM 4400 ( 4401 SELECT 4402 ws.ws_item_sk AS item, 4403 CAST( 4404 sum( 4405 COALESCE( 4406 wr.wr_return_quantity, 4407 0 4408 ) 4409 ) 4410 AS DECIMAL(15,4) 4411 ) 4412 / CAST( 4413 sum( 4414 COALESCE( 4415 ws.ws_quantity, 4416 0 4417 ) 4418 ) 4419 AS DECIMAL(15,4) 4420 ) 4421 AS return_ratio, 4422 CAST( 4423 sum( 4424 COALESCE( 4425 wr.wr_return_amt, 4426 0 4427 ) 4428 ) 4429 AS DECIMAL(15,4) 4430 ) 4431 / CAST( 4432 sum( 4433 COALESCE( 4434 ws.ws_net_paid, 4435 0 4436 ) 4437 ) 4438 AS DECIMAL(15,4) 4439 ) 4440 AS currency_ratio 4441 FROM 4442 web_sales AS ws 4443 LEFT JOIN web_returns AS wr ON 4444 ws.ws_order_number 4445 = wr.wr_order_number 4446 AND ws.ws_item_sk 4447 = wr.wr_item_sk, 4448 date_dim 4449 WHERE 4450 wr.wr_return_amt > 10000 4451 AND ws.ws_net_profit > 1 4452 AND ws.ws_net_paid > 0 4453 AND ws.ws_quantity > 0 4454 AND ws_sold_date_sk = d_date_sk 4455 AND d_year = 1998 4456 AND d_moy = 11 4457 GROUP BY 4458 ws.ws_item_sk 4459 ) 4460 AS in_web 4461 ) 4462 AS web 4463 WHERE 4464 web.return_rank <= 10 OR web.currency_rank <= 10 4465 UNION 4466 SELECT 4467 'catalog' AS channel, 4468 catalog.item, 4469 catalog.return_ratio, 4470 catalog.return_rank, 4471 catalog.currency_rank 4472 FROM 4473 ( 4474 SELECT 4475 item, 4476 return_ratio, 4477 currency_ratio, 4478 rank() OVER (ORDER BY return_ratio) 4479 AS return_rank, 4480 rank() OVER ( 4481 ORDER BY currency_ratio 4482 ) 4483 AS currency_rank 4484 FROM 4485 ( 4486 SELECT 4487 cs.cs_item_sk AS item, 4488 CAST( 4489 sum( 4490 COALESCE( 4491 cr.cr_return_quantity, 4492 0 4493 ) 4494 ) 4495 AS DECIMAL(15,4) 4496 ) 4497 / CAST( 4498 sum( 4499 COALESCE( 4500 cs.cs_quantity, 4501 0 4502 ) 4503 ) 4504 AS DECIMAL(15,4) 4505 ) 4506 AS return_ratio, 4507 CAST( 4508 sum( 4509 COALESCE( 4510 cr.cr_return_amount, 4511 0 4512 ) 4513 ) 4514 AS DECIMAL(15,4) 4515 ) 4516 / CAST( 4517 sum( 4518 COALESCE( 4519 cs.cs_net_paid, 4520 0 4521 ) 4522 ) 4523 AS DECIMAL(15,4) 4524 ) 4525 AS currency_ratio 4526 FROM 4527 catalog_sales AS cs 4528 LEFT JOIN catalog_returns 4529 AS cr ON 4530 cs.cs_order_number 4531 = cr.cr_order_number 4532 AND cs.cs_item_sk 4533 = cr.cr_item_sk, 4534 date_dim 4535 WHERE 4536 cr.cr_return_amount > 10000 4537 AND cs.cs_net_profit > 1 4538 AND cs.cs_net_paid > 0 4539 AND cs.cs_quantity > 0 4540 AND cs_sold_date_sk 4541 = d_date_sk 4542 AND d_year = 1998 4543 AND d_moy = 11 4544 GROUP BY 4545 cs.cs_item_sk 4546 ) 4547 AS in_cat 4548 ) 4549 AS catalog 4550 WHERE 4551 catalog.return_rank <= 10 4552 OR catalog.currency_rank <= 10 4553 UNION 4554 SELECT 4555 'store' AS channel, 4556 store.item, 4557 store.return_ratio, 4558 store.return_rank, 4559 store.currency_rank 4560 FROM 4561 ( 4562 SELECT 4563 item, 4564 return_ratio, 4565 currency_ratio, 4566 rank() OVER (ORDER BY return_ratio) 4567 AS return_rank, 4568 rank() OVER ( 4569 ORDER BY currency_ratio 4570 ) 4571 AS currency_rank 4572 FROM 4573 ( 4574 SELECT 4575 sts.ss_item_sk AS item, 4576 CAST( 4577 sum( 4578 COALESCE( 4579 sr.sr_return_quantity, 4580 0 4581 ) 4582 ) 4583 AS DECIMAL(15,4) 4584 ) 4585 / CAST( 4586 sum( 4587 COALESCE( 4588 sts.ss_quantity, 4589 0 4590 ) 4591 ) 4592 AS DECIMAL(15,4) 4593 ) 4594 AS return_ratio, 4595 CAST( 4596 sum( 4597 COALESCE( 4598 sr.sr_return_amt, 4599 0 4600 ) 4601 ) 4602 AS DECIMAL(15,4) 4603 ) 4604 / CAST( 4605 sum( 4606 COALESCE( 4607 sts.ss_net_paid, 4608 0 4609 ) 4610 ) 4611 AS DECIMAL(15,4) 4612 ) 4613 AS currency_ratio 4614 FROM 4615 store_sales AS sts 4616 LEFT JOIN store_returns 4617 AS sr ON 4618 sts.ss_ticket_number 4619 = sr.sr_ticket_number 4620 AND sts.ss_item_sk 4621 = sr.sr_item_sk, 4622 date_dim 4623 WHERE 4624 sr.sr_return_amt > 10000 4625 AND sts.ss_net_profit > 1 4626 AND sts.ss_net_paid > 0 4627 AND sts.ss_quantity > 0 4628 AND ss_sold_date_sk 4629 = d_date_sk 4630 AND d_year = 1998 4631 AND d_moy = 11 4632 GROUP BY 4633 sts.ss_item_sk 4634 ) 4635 AS in_store 4636 ) 4637 AS store 4638 WHERE 4639 store.return_rank <= 10 4640 OR store.currency_rank <= 10 4641 ) 4642 ORDER BY 4643 1, 4, 5, 2 4644 LIMIT 4645 100; 4646 ` 4647 4648 query50 = ` 4649 SELECT 4650 s_store_name, 4651 s_company_id, 4652 s_street_number, 4653 s_street_name, 4654 s_street_type, 4655 s_suite_number, 4656 s_city, 4657 s_county, 4658 s_state, 4659 s_zip, 4660 sum( 4661 CASE 4662 WHEN (sr_returned_date_sk - ss_sold_date_sk <= 30) 4663 THEN 1 4664 ELSE 0 4665 END 4666 ) 4667 AS "30 days", 4668 sum( 4669 CASE 4670 WHEN sr_returned_date_sk - ss_sold_date_sk > 30 4671 AND sr_returned_date_sk - ss_sold_date_sk <= 60 4672 THEN 1 4673 ELSE 0 4674 END 4675 ) 4676 AS "31-60 days", 4677 sum( 4678 CASE 4679 WHEN sr_returned_date_sk - ss_sold_date_sk > 60 4680 AND sr_returned_date_sk - ss_sold_date_sk <= 90 4681 THEN 1 4682 ELSE 0 4683 END 4684 ) 4685 AS "61-90 days", 4686 sum( 4687 CASE 4688 WHEN sr_returned_date_sk - ss_sold_date_sk > 90 4689 AND sr_returned_date_sk - ss_sold_date_sk <= 120 4690 THEN 1 4691 ELSE 0 4692 END 4693 ) 4694 AS "91-120 days", 4695 sum( 4696 CASE 4697 WHEN (sr_returned_date_sk - ss_sold_date_sk > 120) 4698 THEN 1 4699 ELSE 0 4700 END 4701 ) 4702 AS ">120 days" 4703 FROM 4704 store_sales, 4705 store_returns, 4706 store, 4707 date_dim AS d1, 4708 date_dim AS d2 4709 WHERE 4710 d2.d_year = 2001 4711 AND d2.d_moy = 8 4712 AND ss_ticket_number = sr_ticket_number 4713 AND ss_item_sk = sr_item_sk 4714 AND ss_sold_date_sk = d1.d_date_sk 4715 AND sr_returned_date_sk = d2.d_date_sk 4716 AND ss_customer_sk = sr_customer_sk 4717 AND ss_store_sk = s_store_sk 4718 GROUP BY 4719 s_store_name, 4720 s_company_id, 4721 s_street_number, 4722 s_street_name, 4723 s_street_type, 4724 s_suite_number, 4725 s_city, 4726 s_county, 4727 s_state, 4728 s_zip 4729 ORDER BY 4730 s_store_name, 4731 s_company_id, 4732 s_street_number, 4733 s_street_name, 4734 s_street_type, 4735 s_suite_number, 4736 s_city, 4737 s_county, 4738 s_state, 4739 s_zip 4740 LIMIT 4741 100; 4742 ` 4743 4744 query51 = ` 4745 WITH 4746 web_v1 4747 AS ( 4748 SELECT 4749 ws_item_sk AS item_sk, 4750 d_date, 4751 sum(sum(ws_sales_price)) OVER ( 4752 PARTITION BY 4753 ws_item_sk 4754 ORDER BY 4755 d_date 4756 ROWS 4757 BETWEEN 4758 UNBOUNDED PRECEDING 4759 AND 4760 CURRENT ROW 4761 ) 4762 AS cume_sales 4763 FROM 4764 web_sales, date_dim 4765 WHERE 4766 ws_sold_date_sk = d_date_sk 4767 AND d_month_seq BETWEEN 1212 AND (1212 + 11) 4768 AND ws_item_sk IS NOT NULL 4769 GROUP BY 4770 ws_item_sk, d_date 4771 ), 4772 store_v1 4773 AS ( 4774 SELECT 4775 ss_item_sk AS item_sk, 4776 d_date, 4777 sum(sum(ss_sales_price)) OVER ( 4778 PARTITION BY 4779 ss_item_sk 4780 ORDER BY 4781 d_date 4782 ROWS 4783 BETWEEN 4784 UNBOUNDED PRECEDING 4785 AND 4786 CURRENT ROW 4787 ) 4788 AS cume_sales 4789 FROM 4790 store_sales, date_dim 4791 WHERE 4792 ss_sold_date_sk = d_date_sk 4793 AND d_month_seq BETWEEN 1212 AND (1212 + 11) 4794 AND ss_item_sk IS NOT NULL 4795 GROUP BY 4796 ss_item_sk, d_date 4797 ) 4798 SELECT 4799 * 4800 FROM 4801 ( 4802 SELECT 4803 item_sk, 4804 d_date, 4805 web_sales, 4806 store_sales, 4807 max(web_sales) OVER ( 4808 PARTITION BY 4809 item_sk 4810 ORDER BY 4811 d_date 4812 ROWS 4813 BETWEEN 4814 UNBOUNDED PRECEDING 4815 AND 4816 CURRENT ROW 4817 ) 4818 AS web_cumulative, 4819 max(store_sales) OVER ( 4820 PARTITION BY 4821 item_sk 4822 ORDER BY 4823 d_date 4824 ROWS 4825 BETWEEN 4826 UNBOUNDED PRECEDING 4827 AND 4828 CURRENT ROW 4829 ) 4830 AS store_cumulative 4831 FROM 4832 ( 4833 SELECT 4834 CASE 4835 WHEN web.item_sk IS NOT NULL 4836 THEN web.item_sk 4837 ELSE store.item_sk 4838 END 4839 AS item_sk, 4840 CASE 4841 WHEN web.d_date IS NOT NULL 4842 THEN web.d_date 4843 ELSE store.d_date 4844 END 4845 AS d_date, 4846 web.cume_sales AS web_sales, 4847 store.cume_sales AS store_sales 4848 FROM 4849 web_v1 AS web 4850 FULL JOIN store_v1 AS store ON 4851 web.item_sk = store.item_sk 4852 AND web.d_date = store.d_date 4853 ) 4854 AS x 4855 ) 4856 AS y 4857 WHERE 4858 web_cumulative > store_cumulative 4859 ORDER BY 4860 item_sk, d_date 4861 LIMIT 4862 100; 4863 ` 4864 4865 query52 = ` 4866 SELECT 4867 dt.d_year, 4868 item.i_brand_id AS brand_id, 4869 item.i_brand AS brand, 4870 sum(ss_ext_sales_price) AS ext_price 4871 FROM 4872 date_dim AS dt, store_sales, item 4873 WHERE 4874 dt.d_date_sk = store_sales.ss_sold_date_sk 4875 AND store_sales.ss_item_sk = item.i_item_sk 4876 AND item.i_manager_id = 1 4877 AND dt.d_moy = 12 4878 AND dt.d_year = 2000 4879 GROUP BY 4880 dt.d_year, item.i_brand, item.i_brand_id 4881 ORDER BY 4882 dt.d_year, ext_price DESC, brand_id 4883 LIMIT 4884 100; 4885 ` 4886 4887 query53 = ` 4888 SELECT 4889 * 4890 FROM 4891 ( 4892 SELECT 4893 i_manufact_id, 4894 sum(ss_sales_price) AS sum_sales, 4895 avg(sum(ss_sales_price)) OVER ( 4896 PARTITION BY i_manufact_id 4897 ) 4898 AS avg_quarterly_sales 4899 FROM 4900 item, store_sales, date_dim, store 4901 WHERE 4902 ss_item_sk = i_item_sk 4903 AND ss_sold_date_sk = d_date_sk 4904 AND ss_store_sk = s_store_sk 4905 AND d_month_seq 4906 IN ( 4907 1186, 4908 1186 + 1, 4909 1186 + 2, 4910 1186 + 3, 4911 1186 + 4, 4912 1186 + 5, 4913 1186 + 6, 4914 1186 + 7, 4915 1186 + 8, 4916 1186 + 9, 4917 1186 + 10, 4918 1186 + 11 4919 ) 4920 AND ( 4921 ( 4922 i_category 4923 IN ( 4924 'Books', 4925 'Children', 4926 'Electronics' 4927 ) 4928 AND i_class 4929 IN ( 4930 'personal', 4931 'portable', 4932 'reference', 4933 'self-help' 4934 ) 4935 AND i_brand 4936 IN ( 4937 'scholaramalgamalg #14', 4938 'scholaramalgamalg #7', 4939 'exportiunivamalg #9', 4940 'scholaramalgamalg #9' 4941 ) 4942 ) 4943 OR ( 4944 i_category 4945 IN ('Women', 'Music', 'Men') 4946 AND i_class 4947 IN ( 4948 'accessories', 4949 'classical', 4950 'fragrances', 4951 'pants' 4952 ) 4953 AND i_brand 4954 IN ( 4955 'amalgimporto #1', 4956 'edu packscholar #1', 4957 'exportiimporto #1', 4958 'importoamalg #1' 4959 ) 4960 ) 4961 ) 4962 GROUP BY 4963 i_manufact_id, d_qoy 4964 ) 4965 AS tmp1 4966 WHERE 4967 CASE 4968 WHEN avg_quarterly_sales > 0 4969 THEN abs(sum_sales - avg_quarterly_sales) 4970 / avg_quarterly_sales 4971 ELSE NULL 4972 END 4973 > 0.1 4974 ORDER BY 4975 avg_quarterly_sales, sum_sales, i_manufact_id 4976 LIMIT 4977 100; 4978 ` 4979 4980 query54 = ` 4981 WITH 4982 my_customers 4983 AS ( 4984 SELECT 4985 DISTINCT c_customer_sk, c_current_addr_sk 4986 FROM 4987 ( 4988 SELECT 4989 cs_sold_date_sk AS sold_date_sk, 4990 cs_bill_customer_sk AS customer_sk, 4991 cs_item_sk AS item_sk 4992 FROM 4993 catalog_sales 4994 UNION ALL 4995 SELECT 4996 ws_sold_date_sk AS sold_date_sk, 4997 ws_bill_customer_sk 4998 AS customer_sk, 4999 ws_item_sk AS item_sk 5000 FROM 5001 web_sales 5002 ) 5003 AS cs_or_ws_sales, 5004 item, 5005 date_dim, 5006 customer 5007 WHERE 5008 sold_date_sk = d_date_sk 5009 AND item_sk = i_item_sk 5010 AND i_category = 'Music' 5011 AND i_class = 'country' 5012 AND c_customer_sk 5013 = cs_or_ws_sales.customer_sk 5014 AND d_moy = 1 5015 AND d_year = 1999 5016 ), 5017 my_revenue 5018 AS ( 5019 SELECT 5020 c_customer_sk, 5021 sum(ss_ext_sales_price) AS revenue 5022 FROM 5023 my_customers, 5024 store_sales, 5025 customer_address, 5026 store, 5027 date_dim 5028 WHERE 5029 c_current_addr_sk = ca_address_sk 5030 AND ca_county = s_county 5031 AND ca_state = s_state 5032 AND ss_sold_date_sk = d_date_sk 5033 AND c_customer_sk = ss_customer_sk 5034 AND d_month_seq BETWEEN (SELECT DISTINCT d_month_seq + 1 FROM date_dim WHERE (d_year = 1999) AND (d_moy = 1)) AND (SELECT DISTINCT d_month_seq + 3 FROM date_dim WHERE (d_year = 1999) AND (d_moy = 1)) 5035 GROUP BY 5036 c_customer_sk 5037 ), 5038 segments 5039 AS ( 5040 SELECT 5041 CAST((revenue / 50) AS INT8) AS segment 5042 FROM 5043 my_revenue 5044 ) 5045 SELECT 5046 segment, 5047 count(*) AS num_customers, 5048 segment * 50 AS segment_base 5049 FROM 5050 segments 5051 GROUP BY 5052 segment 5053 ORDER BY 5054 segment, num_customers 5055 LIMIT 5056 100; 5057 ` 5058 5059 query55 = ` 5060 SELECT 5061 i_brand_id AS brand_id, 5062 i_brand AS brand, 5063 sum(ss_ext_sales_price) AS ext_price 5064 FROM 5065 date_dim, store_sales, item 5066 WHERE 5067 d_date_sk = ss_sold_date_sk 5068 AND ss_item_sk = i_item_sk 5069 AND i_manager_id = 52 5070 AND d_moy = 11 5071 AND d_year = 2000 5072 GROUP BY 5073 i_brand, i_brand_id 5074 ORDER BY 5075 ext_price DESC, i_brand_id 5076 LIMIT 5077 100; 5078 ` 5079 5080 query56 = ` 5081 WITH 5082 ss 5083 AS ( 5084 SELECT 5085 i_item_id, 5086 sum(ss_ext_sales_price) AS total_sales 5087 FROM 5088 store_sales, 5089 date_dim, 5090 customer_address, 5091 item 5092 WHERE 5093 i_item_id 5094 IN ( 5095 SELECT 5096 i_item_id 5097 FROM 5098 item 5099 WHERE 5100 i_color 5101 IN ('powder', 'orchid', 'pink') 5102 ) 5103 AND ss_item_sk = i_item_sk 5104 AND ss_sold_date_sk = d_date_sk 5105 AND d_year = 2000 5106 AND d_moy = 3 5107 AND ss_addr_sk = ca_address_sk 5108 AND ca_gmt_offset = -6 5109 GROUP BY 5110 i_item_id 5111 ), 5112 cs 5113 AS ( 5114 SELECT 5115 i_item_id, 5116 sum(cs_ext_sales_price) AS total_sales 5117 FROM 5118 catalog_sales, 5119 date_dim, 5120 customer_address, 5121 item 5122 WHERE 5123 i_item_id 5124 IN ( 5125 SELECT 5126 i_item_id 5127 FROM 5128 item 5129 WHERE 5130 i_color 5131 IN ('powder', 'orchid', 'pink') 5132 ) 5133 AND cs_item_sk = i_item_sk 5134 AND cs_sold_date_sk = d_date_sk 5135 AND d_year = 2000 5136 AND d_moy = 3 5137 AND cs_bill_addr_sk = ca_address_sk 5138 AND ca_gmt_offset = -6 5139 GROUP BY 5140 i_item_id 5141 ), 5142 ws 5143 AS ( 5144 SELECT 5145 i_item_id, 5146 sum(ws_ext_sales_price) AS total_sales 5147 FROM 5148 web_sales, date_dim, customer_address, item 5149 WHERE 5150 i_item_id 5151 IN ( 5152 SELECT 5153 i_item_id 5154 FROM 5155 item 5156 WHERE 5157 i_color 5158 IN ('powder', 'orchid', 'pink') 5159 ) 5160 AND ws_item_sk = i_item_sk 5161 AND ws_sold_date_sk = d_date_sk 5162 AND d_year = 2000 5163 AND d_moy = 3 5164 AND ws_bill_addr_sk = ca_address_sk 5165 AND ca_gmt_offset = -6 5166 GROUP BY 5167 i_item_id 5168 ) 5169 SELECT 5170 i_item_id, sum(total_sales) AS total_sales 5171 FROM 5172 ( 5173 SELECT * FROM ss UNION ALL SELECT * FROM cs 5174 UNION ALL SELECT * FROM ws 5175 ) 5176 AS tmp1 5177 GROUP BY 5178 i_item_id 5179 ORDER BY 5180 total_sales, i_item_id 5181 LIMIT 5182 100; 5183 ` 5184 5185 query57 = ` 5186 WITH 5187 v1 5188 AS ( 5189 SELECT 5190 i_category, 5191 i_brand, 5192 cc_name, 5193 d_year, 5194 d_moy, 5195 sum(cs_sales_price) AS sum_sales, 5196 avg(sum(cs_sales_price)) OVER ( 5197 PARTITION BY 5198 i_category, i_brand, cc_name, d_year 5199 ) 5200 AS avg_monthly_sales, 5201 rank() OVER ( 5202 PARTITION BY 5203 i_category, i_brand, cc_name 5204 ORDER BY 5205 d_year, d_moy 5206 ) 5207 AS rn 5208 FROM 5209 item, catalog_sales, date_dim, call_center 5210 WHERE 5211 cs_item_sk = i_item_sk 5212 AND cs_sold_date_sk = d_date_sk 5213 AND cc_call_center_sk = cs_call_center_sk 5214 AND ( 5215 d_year = 2001 5216 OR ( 5217 d_year = 2001 - 1 5218 AND d_moy = 12 5219 ) 5220 OR (d_year = 2001 + 1 AND d_moy = 1) 5221 ) 5222 GROUP BY 5223 i_category, i_brand, cc_name, d_year, d_moy 5224 ), 5225 v2 5226 AS ( 5227 SELECT 5228 v1.i_category, 5229 v1.i_brand, 5230 v1.cc_name, 5231 v1.d_year, 5232 v1.avg_monthly_sales, 5233 v1.sum_sales, 5234 v1_lag.sum_sales AS psum, 5235 v1_lead.sum_sales AS nsum 5236 FROM 5237 v1, v1 AS v1_lag, v1 AS v1_lead 5238 WHERE 5239 v1.i_category = v1_lag.i_category 5240 AND v1.i_category = v1_lead.i_category 5241 AND v1.i_brand = v1_lag.i_brand 5242 AND v1.i_brand = v1_lead.i_brand 5243 AND v1.cc_name = v1_lag.cc_name 5244 AND v1.cc_name = v1_lead.cc_name 5245 AND v1.rn = v1_lag.rn + 1 5246 AND v1.rn = v1_lead.rn - 1 5247 ) 5248 SELECT 5249 * 5250 FROM 5251 v2 5252 WHERE 5253 d_year = 2001 5254 AND avg_monthly_sales > 0 5255 AND CASE 5256 WHEN avg_monthly_sales > 0 5257 THEN abs(sum_sales - avg_monthly_sales) 5258 / avg_monthly_sales 5259 ELSE NULL 5260 END 5261 > 0.1 5262 ORDER BY 5263 sum_sales - avg_monthly_sales, avg_monthly_sales 5264 LIMIT 5265 100; 5266 ` 5267 5268 query58 = ` 5269 WITH 5270 ss_items 5271 AS ( 5272 SELECT 5273 i_item_id AS item_id, 5274 sum(ss_ext_sales_price) AS ss_item_rev 5275 FROM 5276 store_sales, item, date_dim 5277 WHERE 5278 ss_item_sk = i_item_sk 5279 AND d_date 5280 IN ( 5281 SELECT 5282 d_date 5283 FROM 5284 date_dim 5285 WHERE 5286 d_week_seq 5287 = ( 5288 SELECT 5289 d_week_seq 5290 FROM 5291 date_dim 5292 WHERE 5293 d_date 5294 = '2001-06-16' 5295 ) 5296 ) 5297 AND ss_sold_date_sk = d_date_sk 5298 GROUP BY 5299 i_item_id 5300 ), 5301 cs_items 5302 AS ( 5303 SELECT 5304 i_item_id AS item_id, 5305 sum(cs_ext_sales_price) AS cs_item_rev 5306 FROM 5307 catalog_sales, item, date_dim 5308 WHERE 5309 cs_item_sk = i_item_sk 5310 AND d_date 5311 IN ( 5312 SELECT 5313 d_date 5314 FROM 5315 date_dim 5316 WHERE 5317 d_week_seq 5318 = ( 5319 SELECT 5320 d_week_seq 5321 FROM 5322 date_dim 5323 WHERE 5324 d_date 5325 = '2001-06-16' 5326 ) 5327 ) 5328 AND cs_sold_date_sk = d_date_sk 5329 GROUP BY 5330 i_item_id 5331 ), 5332 ws_items 5333 AS ( 5334 SELECT 5335 i_item_id AS item_id, 5336 sum(ws_ext_sales_price) AS ws_item_rev 5337 FROM 5338 web_sales, item, date_dim 5339 WHERE 5340 ws_item_sk = i_item_sk 5341 AND d_date 5342 IN ( 5343 SELECT 5344 d_date 5345 FROM 5346 date_dim 5347 WHERE 5348 d_week_seq 5349 = ( 5350 SELECT 5351 d_week_seq 5352 FROM 5353 date_dim 5354 WHERE 5355 d_date 5356 = '2001-06-16' 5357 ) 5358 ) 5359 AND ws_sold_date_sk = d_date_sk 5360 GROUP BY 5361 i_item_id 5362 ) 5363 SELECT 5364 ss_items.item_id, 5365 ss_item_rev, 5366 ss_item_rev 5367 / ((ss_item_rev + cs_item_rev + ws_item_rev) / 3) 5368 * 100 5369 AS ss_dev, 5370 cs_item_rev, 5371 cs_item_rev 5372 / ((ss_item_rev + cs_item_rev + ws_item_rev) / 3) 5373 * 100 5374 AS cs_dev, 5375 ws_item_rev, 5376 ws_item_rev 5377 / ((ss_item_rev + cs_item_rev + ws_item_rev) / 3) 5378 * 100 5379 AS ws_dev, 5380 (ss_item_rev + cs_item_rev + ws_item_rev) / 3 AS average 5381 FROM 5382 ss_items, cs_items, ws_items 5383 WHERE 5384 ss_items.item_id = cs_items.item_id 5385 AND ss_items.item_id = ws_items.item_id 5386 AND ss_item_rev BETWEEN (0.9 * cs_item_rev) AND (1.1 * cs_item_rev) 5387 AND ss_item_rev BETWEEN (0.9 * ws_item_rev) AND (1.1 * ws_item_rev) 5388 AND cs_item_rev BETWEEN (0.9 * ss_item_rev) AND (1.1 * ss_item_rev) 5389 AND cs_item_rev BETWEEN (0.9 * ws_item_rev) AND (1.1 * ws_item_rev) 5390 AND ws_item_rev BETWEEN (0.9 * ss_item_rev) AND (1.1 * ss_item_rev) 5391 AND ws_item_rev BETWEEN (0.9 * cs_item_rev) AND (1.1 * cs_item_rev) 5392 ORDER BY 5393 item_id, ss_item_rev 5394 LIMIT 5395 100; 5396 ` 5397 5398 query59 = ` 5399 WITH 5400 wss 5401 AS ( 5402 SELECT 5403 d_week_seq, 5404 ss_store_sk, 5405 sum( 5406 CASE 5407 WHEN (d_day_name = 'Sunday') 5408 THEN ss_sales_price 5409 ELSE NULL 5410 END 5411 ) 5412 AS sun_sales, 5413 sum( 5414 CASE 5415 WHEN (d_day_name = 'Monday') 5416 THEN ss_sales_price 5417 ELSE NULL 5418 END 5419 ) 5420 AS mon_sales, 5421 sum( 5422 CASE 5423 WHEN (d_day_name = 'Tuesday') 5424 THEN ss_sales_price 5425 ELSE NULL 5426 END 5427 ) 5428 AS tue_sales, 5429 sum( 5430 CASE 5431 WHEN (d_day_name = 'Wednesday') 5432 THEN ss_sales_price 5433 ELSE NULL 5434 END 5435 ) 5436 AS wed_sales, 5437 sum( 5438 CASE 5439 WHEN (d_day_name = 'Thursday') 5440 THEN ss_sales_price 5441 ELSE NULL 5442 END 5443 ) 5444 AS thu_sales, 5445 sum( 5446 CASE 5447 WHEN (d_day_name = 'Friday') 5448 THEN ss_sales_price 5449 ELSE NULL 5450 END 5451 ) 5452 AS fri_sales, 5453 sum( 5454 CASE 5455 WHEN (d_day_name = 'Saturday') 5456 THEN ss_sales_price 5457 ELSE NULL 5458 END 5459 ) 5460 AS sat_sales 5461 FROM 5462 store_sales, date_dim 5463 WHERE 5464 d_date_sk = ss_sold_date_sk 5465 GROUP BY 5466 d_week_seq, ss_store_sk 5467 ) 5468 SELECT 5469 s_store_name1, 5470 s_store_id1, 5471 d_week_seq1, 5472 sun_sales1 / sun_sales2, 5473 mon_sales1 / mon_sales2, 5474 tue_sales1 / tue_sales2, 5475 wed_sales1 / wed_sales2, 5476 thu_sales1 / thu_sales2, 5477 fri_sales1 / fri_sales2, 5478 sat_sales1 / sat_sales2 5479 FROM 5480 ( 5481 SELECT 5482 s_store_name AS s_store_name1, 5483 wss.d_week_seq AS d_week_seq1, 5484 s_store_id AS s_store_id1, 5485 sun_sales AS sun_sales1, 5486 mon_sales AS mon_sales1, 5487 tue_sales AS tue_sales1, 5488 wed_sales AS wed_sales1, 5489 thu_sales AS thu_sales1, 5490 fri_sales AS fri_sales1, 5491 sat_sales AS sat_sales1 5492 FROM 5493 wss, store, date_dim AS d 5494 WHERE 5495 d.d_week_seq = wss.d_week_seq 5496 AND ss_store_sk = s_store_sk 5497 AND d_month_seq BETWEEN 1195 AND (1195 + 11) 5498 ) 5499 AS y, 5500 ( 5501 SELECT 5502 s_store_name AS s_store_name2, 5503 wss.d_week_seq AS d_week_seq2, 5504 s_store_id AS s_store_id2, 5505 sun_sales AS sun_sales2, 5506 mon_sales AS mon_sales2, 5507 tue_sales AS tue_sales2, 5508 wed_sales AS wed_sales2, 5509 thu_sales AS thu_sales2, 5510 fri_sales AS fri_sales2, 5511 sat_sales AS sat_sales2 5512 FROM 5513 wss, store, date_dim AS d 5514 WHERE 5515 d.d_week_seq = wss.d_week_seq 5516 AND ss_store_sk = s_store_sk 5517 AND d_month_seq BETWEEN (1195 + 12) AND (1195 + 23) 5518 ) 5519 AS x 5520 WHERE 5521 s_store_id1 = s_store_id2 5522 AND d_week_seq1 = d_week_seq2 - 52 5523 ORDER BY 5524 s_store_name1, s_store_id1, d_week_seq1 5525 LIMIT 5526 100; 5527 ` 5528 5529 query60 = ` 5530 WITH 5531 ss 5532 AS ( 5533 SELECT 5534 i_item_id, 5535 sum(ss_ext_sales_price) AS total_sales 5536 FROM 5537 store_sales, 5538 date_dim, 5539 customer_address, 5540 item 5541 WHERE 5542 i_item_id 5543 IN ( 5544 SELECT 5545 i_item_id 5546 FROM 5547 item 5548 WHERE 5549 i_category IN ('Jewelry',) 5550 ) 5551 AND ss_item_sk = i_item_sk 5552 AND ss_sold_date_sk = d_date_sk 5553 AND d_year = 2000 5554 AND d_moy = 10 5555 AND ss_addr_sk = ca_address_sk 5556 AND ca_gmt_offset = -5 5557 GROUP BY 5558 i_item_id 5559 ), 5560 cs 5561 AS ( 5562 SELECT 5563 i_item_id, 5564 sum(cs_ext_sales_price) AS total_sales 5565 FROM 5566 catalog_sales, 5567 date_dim, 5568 customer_address, 5569 item 5570 WHERE 5571 i_item_id 5572 IN ( 5573 SELECT 5574 i_item_id 5575 FROM 5576 item 5577 WHERE 5578 i_category IN ('Jewelry',) 5579 ) 5580 AND cs_item_sk = i_item_sk 5581 AND cs_sold_date_sk = d_date_sk 5582 AND d_year = 2000 5583 AND d_moy = 10 5584 AND cs_bill_addr_sk = ca_address_sk 5585 AND ca_gmt_offset = -5 5586 GROUP BY 5587 i_item_id 5588 ), 5589 ws 5590 AS ( 5591 SELECT 5592 i_item_id, 5593 sum(ws_ext_sales_price) AS total_sales 5594 FROM 5595 web_sales, date_dim, customer_address, item 5596 WHERE 5597 i_item_id 5598 IN ( 5599 SELECT 5600 i_item_id 5601 FROM 5602 item 5603 WHERE 5604 i_category IN ('Jewelry',) 5605 ) 5606 AND ws_item_sk = i_item_sk 5607 AND ws_sold_date_sk = d_date_sk 5608 AND d_year = 2000 5609 AND d_moy = 10 5610 AND ws_bill_addr_sk = ca_address_sk 5611 AND ca_gmt_offset = -5 5612 GROUP BY 5613 i_item_id 5614 ) 5615 SELECT 5616 i_item_id, sum(total_sales) AS total_sales 5617 FROM 5618 ( 5619 SELECT * FROM ss UNION ALL SELECT * FROM cs 5620 UNION ALL SELECT * FROM ws 5621 ) 5622 AS tmp1 5623 GROUP BY 5624 i_item_id 5625 ORDER BY 5626 i_item_id, total_sales 5627 LIMIT 5628 100; 5629 ` 5630 5631 query61 = ` 5632 SELECT 5633 promotions, 5634 total, 5635 CAST(promotions AS DECIMAL(15,4)) 5636 / CAST(total AS DECIMAL(15,4)) 5637 * 100 5638 FROM 5639 ( 5640 SELECT 5641 sum(ss_ext_sales_price) AS promotions 5642 FROM 5643 store_sales, 5644 store, 5645 promotion, 5646 date_dim, 5647 customer, 5648 customer_address, 5649 item 5650 WHERE 5651 ss_sold_date_sk = d_date_sk 5652 AND ss_store_sk = s_store_sk 5653 AND ss_promo_sk = p_promo_sk 5654 AND ss_customer_sk = c_customer_sk 5655 AND ca_address_sk = c_current_addr_sk 5656 AND ss_item_sk = i_item_sk 5657 AND ca_gmt_offset = -7 5658 AND i_category = 'Home' 5659 AND ( 5660 p_channel_dmail = 'Y' 5661 OR p_channel_email = 'Y' 5662 OR p_channel_tv = 'Y' 5663 ) 5664 AND s_gmt_offset = -7 5665 AND d_year = 2000 5666 AND d_moy = 12 5667 ) 5668 AS promotional_sales, 5669 ( 5670 SELECT 5671 sum(ss_ext_sales_price) AS total 5672 FROM 5673 store_sales, 5674 store, 5675 date_dim, 5676 customer, 5677 customer_address, 5678 item 5679 WHERE 5680 ss_sold_date_sk = d_date_sk 5681 AND ss_store_sk = s_store_sk 5682 AND ss_customer_sk = c_customer_sk 5683 AND ca_address_sk = c_current_addr_sk 5684 AND ss_item_sk = i_item_sk 5685 AND ca_gmt_offset = -7 5686 AND i_category = 'Home' 5687 AND s_gmt_offset = -7 5688 AND d_year = 2000 5689 AND d_moy = 12 5690 ) 5691 AS all_sales 5692 ORDER BY 5693 promotions, total 5694 LIMIT 5695 100; 5696 ` 5697 5698 query62 = ` 5699 SELECT 5700 substr(w_warehouse_name, 1, 20), 5701 sm_type, 5702 web_name, 5703 sum( 5704 CASE 5705 WHEN (ws_ship_date_sk - ws_sold_date_sk <= 30) 5706 THEN 1 5707 ELSE 0 5708 END 5709 ) 5710 AS "30 days", 5711 sum( 5712 CASE 5713 WHEN ws_ship_date_sk - ws_sold_date_sk > 30 5714 AND ws_ship_date_sk - ws_sold_date_sk <= 60 5715 THEN 1 5716 ELSE 0 5717 END 5718 ) 5719 AS "31-60 days", 5720 sum( 5721 CASE 5722 WHEN ws_ship_date_sk - ws_sold_date_sk > 60 5723 AND ws_ship_date_sk - ws_sold_date_sk <= 90 5724 THEN 1 5725 ELSE 0 5726 END 5727 ) 5728 AS "61-90 days", 5729 sum( 5730 CASE 5731 WHEN ws_ship_date_sk - ws_sold_date_sk > 90 5732 AND ws_ship_date_sk - ws_sold_date_sk <= 120 5733 THEN 1 5734 ELSE 0 5735 END 5736 ) 5737 AS "91-120 days", 5738 sum( 5739 CASE 5740 WHEN (ws_ship_date_sk - ws_sold_date_sk > 120) 5741 THEN 1 5742 ELSE 0 5743 END 5744 ) 5745 AS ">120 days" 5746 FROM 5747 web_sales, warehouse, ship_mode, web_site, date_dim 5748 WHERE 5749 d_month_seq BETWEEN 1223 AND (1223 + 11) 5750 AND ws_ship_date_sk = d_date_sk 5751 AND ws_warehouse_sk = w_warehouse_sk 5752 AND ws_ship_mode_sk = sm_ship_mode_sk 5753 AND ws_web_site_sk = web_site_sk 5754 GROUP BY 5755 substr(w_warehouse_name, 1, 20), sm_type, web_name 5756 ORDER BY 5757 substr(w_warehouse_name, 1, 20), sm_type, web_name 5758 LIMIT 5759 100; 5760 ` 5761 5762 query63 = ` 5763 SELECT 5764 * 5765 FROM 5766 ( 5767 SELECT 5768 i_manager_id, 5769 sum(ss_sales_price) AS sum_sales, 5770 avg(sum(ss_sales_price)) OVER ( 5771 PARTITION BY i_manager_id 5772 ) 5773 AS avg_monthly_sales 5774 FROM 5775 item, store_sales, date_dim, store 5776 WHERE 5777 ss_item_sk = i_item_sk 5778 AND ss_sold_date_sk = d_date_sk 5779 AND ss_store_sk = s_store_sk 5780 AND d_month_seq 5781 IN ( 5782 1222, 5783 1222 + 1, 5784 1222 + 2, 5785 1222 + 3, 5786 1222 + 4, 5787 1222 + 5, 5788 1222 + 6, 5789 1222 + 7, 5790 1222 + 8, 5791 1222 + 9, 5792 1222 + 10, 5793 1222 + 11 5794 ) 5795 AND ( 5796 ( 5797 i_category 5798 IN ( 5799 'Books', 5800 'Children', 5801 'Electronics' 5802 ) 5803 AND i_class 5804 IN ( 5805 'personal', 5806 'portable', 5807 'reference', 5808 'self-help' 5809 ) 5810 AND i_brand 5811 IN ( 5812 'scholaramalgamalg #14', 5813 'scholaramalgamalg #7', 5814 'exportiunivamalg #9', 5815 'scholaramalgamalg #9' 5816 ) 5817 ) 5818 OR ( 5819 i_category 5820 IN ('Women', 'Music', 'Men') 5821 AND i_class 5822 IN ( 5823 'accessories', 5824 'classical', 5825 'fragrances', 5826 'pants' 5827 ) 5828 AND i_brand 5829 IN ( 5830 'amalgimporto #1', 5831 'edu packscholar #1', 5832 'exportiimporto #1', 5833 'importoamalg #1' 5834 ) 5835 ) 5836 ) 5837 GROUP BY 5838 i_manager_id, d_moy 5839 ) 5840 AS tmp1 5841 WHERE 5842 CASE 5843 WHEN avg_monthly_sales > 0 5844 THEN abs(sum_sales - avg_monthly_sales) 5845 / avg_monthly_sales 5846 ELSE NULL 5847 END 5848 > 0.1 5849 ORDER BY 5850 i_manager_id, avg_monthly_sales, sum_sales 5851 LIMIT 5852 100; 5853 ` 5854 5855 query64 = ` 5856 WITH 5857 cs_ui 5858 AS ( 5859 SELECT 5860 cs_item_sk, 5861 sum(cs_ext_list_price) AS sale, 5862 sum( 5863 cr_refunded_cash 5864 + cr_reversed_charge 5865 + cr_store_credit 5866 ) 5867 AS refund 5868 FROM 5869 catalog_sales, catalog_returns 5870 WHERE 5871 cs_item_sk = cr_item_sk 5872 AND cs_order_number = cr_order_number 5873 GROUP BY 5874 cs_item_sk 5875 HAVING 5876 sum(cs_ext_list_price) 5877 > 2 5878 * sum( 5879 cr_refunded_cash 5880 + cr_reversed_charge 5881 + cr_store_credit 5882 ) 5883 ), 5884 cross_sales 5885 AS ( 5886 SELECT 5887 i_product_name AS product_name, 5888 i_item_sk AS item_sk, 5889 s_store_name AS store_name, 5890 s_zip AS store_zip, 5891 ad1.ca_street_number AS b_street_number, 5892 ad1.ca_street_name AS b_street_name, 5893 ad1.ca_city AS b_city, 5894 ad1.ca_zip AS b_zip, 5895 ad2.ca_street_number AS c_street_number, 5896 ad2.ca_street_name AS c_street_name, 5897 ad2.ca_city AS c_city, 5898 ad2.ca_zip AS c_zip, 5899 d1.d_year AS syear, 5900 d2.d_year AS fsyear, 5901 d3.d_year AS s2year, 5902 count(*) AS cnt, 5903 sum(ss_wholesale_cost) AS s1, 5904 sum(ss_list_price) AS s2, 5905 sum(ss_coupon_amt) AS s3 5906 FROM 5907 store_sales, 5908 store_returns, 5909 cs_ui, 5910 date_dim AS d1, 5911 date_dim AS d2, 5912 date_dim AS d3, 5913 store, 5914 customer, 5915 customer_demographics AS cd1, 5916 customer_demographics AS cd2, 5917 promotion, 5918 household_demographics AS hd1, 5919 household_demographics AS hd2, 5920 customer_address AS ad1, 5921 customer_address AS ad2, 5922 income_band AS ib1, 5923 income_band AS ib2, 5924 item 5925 WHERE 5926 ss_store_sk = s_store_sk 5927 AND ss_sold_date_sk = d1.d_date_sk 5928 AND ss_customer_sk = c_customer_sk 5929 AND ss_cdemo_sk = cd1.cd_demo_sk 5930 AND ss_hdemo_sk = hd1.hd_demo_sk 5931 AND ss_addr_sk = ad1.ca_address_sk 5932 AND ss_item_sk = i_item_sk 5933 AND ss_item_sk = sr_item_sk 5934 AND ss_ticket_number = sr_ticket_number 5935 AND ss_item_sk = cs_ui.cs_item_sk 5936 AND c_current_cdemo_sk = cd2.cd_demo_sk 5937 AND c_current_hdemo_sk = hd2.hd_demo_sk 5938 AND c_current_addr_sk = ad2.ca_address_sk 5939 AND c_first_sales_date_sk = d2.d_date_sk 5940 AND c_first_shipto_date_sk = d3.d_date_sk 5941 AND ss_promo_sk = p_promo_sk 5942 AND hd1.hd_income_band_sk 5943 = ib1.ib_income_band_sk 5944 AND hd2.hd_income_band_sk 5945 = ib2.ib_income_band_sk 5946 AND cd1.cd_marital_status 5947 != cd2.cd_marital_status 5948 AND i_color 5949 IN ( 5950 'orange', 5951 'lace', 5952 'lawn', 5953 'misty', 5954 'blush', 5955 'pink' 5956 ) 5957 AND i_current_price BETWEEN 48 AND (48 + 10) 5958 AND i_current_price BETWEEN (48 + 1) AND (48 + 15) 5959 GROUP BY 5960 i_product_name, 5961 i_item_sk, 5962 s_store_name, 5963 s_zip, 5964 ad1.ca_street_number, 5965 ad1.ca_street_name, 5966 ad1.ca_city, 5967 ad1.ca_zip, 5968 ad2.ca_street_number, 5969 ad2.ca_street_name, 5970 ad2.ca_city, 5971 ad2.ca_zip, 5972 d1.d_year, 5973 d2.d_year, 5974 d3.d_year 5975 ) 5976 SELECT 5977 cs1.product_name, 5978 cs1.store_name, 5979 cs1.store_zip, 5980 cs1.b_street_number, 5981 cs1.b_street_name, 5982 cs1.b_city, 5983 cs1.b_zip, 5984 cs1.c_street_number, 5985 cs1.c_street_name, 5986 cs1.c_city, 5987 cs1.c_zip, 5988 cs1.syear, 5989 cs1.cnt, 5990 cs1.s1 AS s11, 5991 cs1.s2 AS s21, 5992 cs1.s3 AS s31, 5993 cs2.s1 AS s12, 5994 cs2.s2 AS s22, 5995 cs2.s3 AS s32, 5996 cs2.syear, 5997 cs2.cnt 5998 FROM 5999 cross_sales AS cs1, cross_sales AS cs2 6000 WHERE 6001 cs1.item_sk = cs2.item_sk 6002 AND cs1.syear = 1999 6003 AND cs2.syear = 1999 + 1 6004 AND cs2.cnt <= cs1.cnt 6005 AND cs1.store_name = cs2.store_name 6006 AND cs1.store_zip = cs2.store_zip 6007 ORDER BY 6008 cs1.product_name, 6009 cs1.store_name, 6010 cs2.cnt, 6011 cs1.s1, 6012 cs2.s1; 6013 ` 6014 6015 query65 = ` 6016 SELECT 6017 s_store_name, 6018 i_item_desc, 6019 sc.revenue, 6020 i_current_price, 6021 i_wholesale_cost, 6022 i_brand 6023 FROM 6024 store, 6025 item, 6026 ( 6027 SELECT 6028 ss_store_sk, avg(revenue) AS ave 6029 FROM 6030 ( 6031 SELECT 6032 ss_store_sk, 6033 ss_item_sk, 6034 sum(ss_sales_price) AS revenue 6035 FROM 6036 store_sales, date_dim 6037 WHERE 6038 ss_sold_date_sk = d_date_sk 6039 AND d_month_seq BETWEEN 1176 AND (1176 + 11) 6040 GROUP BY 6041 ss_store_sk, ss_item_sk 6042 ) 6043 AS sa 6044 GROUP BY 6045 ss_store_sk 6046 ) 6047 AS sb, 6048 ( 6049 SELECT 6050 ss_store_sk, 6051 ss_item_sk, 6052 sum(ss_sales_price) AS revenue 6053 FROM 6054 store_sales, date_dim 6055 WHERE 6056 ss_sold_date_sk = d_date_sk 6057 AND d_month_seq BETWEEN 1176 AND (1176 + 11) 6058 GROUP BY 6059 ss_store_sk, ss_item_sk 6060 ) 6061 AS sc 6062 WHERE 6063 sb.ss_store_sk = sc.ss_store_sk 6064 AND sc.revenue <= 0.1 * sb.ave 6065 AND s_store_sk = sc.ss_store_sk 6066 AND i_item_sk = sc.ss_item_sk 6067 ORDER BY 6068 s_store_name, i_item_desc 6069 LIMIT 6070 100; 6071 ` 6072 6073 query66 = ` 6074 SELECT 6075 w_warehouse_name, 6076 w_warehouse_sq_ft, 6077 w_city, 6078 w_county, 6079 w_state, 6080 w_country, 6081 ship_carriers, 6082 year, 6083 sum(jan_sales) AS jan_sales, 6084 sum(feb_sales) AS feb_sales, 6085 sum(mar_sales) AS mar_sales, 6086 sum(apr_sales) AS apr_sales, 6087 sum(may_sales) AS may_sales, 6088 sum(jun_sales) AS jun_sales, 6089 sum(jul_sales) AS jul_sales, 6090 sum(aug_sales) AS aug_sales, 6091 sum(sep_sales) AS sep_sales, 6092 sum(oct_sales) AS oct_sales, 6093 sum(nov_sales) AS nov_sales, 6094 sum(dec_sales) AS dec_sales, 6095 sum(jan_sales / w_warehouse_sq_ft) 6096 AS jan_sales_per_sq_foot, 6097 sum(feb_sales / w_warehouse_sq_ft) 6098 AS feb_sales_per_sq_foot, 6099 sum(mar_sales / w_warehouse_sq_ft) 6100 AS mar_sales_per_sq_foot, 6101 sum(apr_sales / w_warehouse_sq_ft) 6102 AS apr_sales_per_sq_foot, 6103 sum(may_sales / w_warehouse_sq_ft) 6104 AS may_sales_per_sq_foot, 6105 sum(jun_sales / w_warehouse_sq_ft) 6106 AS jun_sales_per_sq_foot, 6107 sum(jul_sales / w_warehouse_sq_ft) 6108 AS jul_sales_per_sq_foot, 6109 sum(aug_sales / w_warehouse_sq_ft) 6110 AS aug_sales_per_sq_foot, 6111 sum(sep_sales / w_warehouse_sq_ft) 6112 AS sep_sales_per_sq_foot, 6113 sum(oct_sales / w_warehouse_sq_ft) 6114 AS oct_sales_per_sq_foot, 6115 sum(nov_sales / w_warehouse_sq_ft) 6116 AS nov_sales_per_sq_foot, 6117 sum(dec_sales / w_warehouse_sq_ft) 6118 AS dec_sales_per_sq_foot, 6119 sum(jan_net) AS jan_net, 6120 sum(feb_net) AS feb_net, 6121 sum(mar_net) AS mar_net, 6122 sum(apr_net) AS apr_net, 6123 sum(may_net) AS may_net, 6124 sum(jun_net) AS jun_net, 6125 sum(jul_net) AS jul_net, 6126 sum(aug_net) AS aug_net, 6127 sum(sep_net) AS sep_net, 6128 sum(oct_net) AS oct_net, 6129 sum(nov_net) AS nov_net, 6130 sum(dec_net) AS dec_net 6131 FROM 6132 ( 6133 SELECT 6134 w_warehouse_name, 6135 w_warehouse_sq_ft, 6136 w_city, 6137 w_county, 6138 w_state, 6139 w_country, 6140 'ORIENTAL' || ',' || 'BOXBUNDLES' 6141 AS ship_carriers, 6142 d_year AS year, 6143 sum( 6144 CASE 6145 WHEN d_moy = 1 6146 THEN ws_ext_sales_price * ws_quantity 6147 ELSE 0 6148 END 6149 ) 6150 AS jan_sales, 6151 sum( 6152 CASE 6153 WHEN d_moy = 2 6154 THEN ws_ext_sales_price * ws_quantity 6155 ELSE 0 6156 END 6157 ) 6158 AS feb_sales, 6159 sum( 6160 CASE 6161 WHEN d_moy = 3 6162 THEN ws_ext_sales_price * ws_quantity 6163 ELSE 0 6164 END 6165 ) 6166 AS mar_sales, 6167 sum( 6168 CASE 6169 WHEN d_moy = 4 6170 THEN ws_ext_sales_price * ws_quantity 6171 ELSE 0 6172 END 6173 ) 6174 AS apr_sales, 6175 sum( 6176 CASE 6177 WHEN d_moy = 5 6178 THEN ws_ext_sales_price * ws_quantity 6179 ELSE 0 6180 END 6181 ) 6182 AS may_sales, 6183 sum( 6184 CASE 6185 WHEN d_moy = 6 6186 THEN ws_ext_sales_price * ws_quantity 6187 ELSE 0 6188 END 6189 ) 6190 AS jun_sales, 6191 sum( 6192 CASE 6193 WHEN d_moy = 7 6194 THEN ws_ext_sales_price * ws_quantity 6195 ELSE 0 6196 END 6197 ) 6198 AS jul_sales, 6199 sum( 6200 CASE 6201 WHEN d_moy = 8 6202 THEN ws_ext_sales_price * ws_quantity 6203 ELSE 0 6204 END 6205 ) 6206 AS aug_sales, 6207 sum( 6208 CASE 6209 WHEN d_moy = 9 6210 THEN ws_ext_sales_price * ws_quantity 6211 ELSE 0 6212 END 6213 ) 6214 AS sep_sales, 6215 sum( 6216 CASE 6217 WHEN d_moy = 10 6218 THEN ws_ext_sales_price * ws_quantity 6219 ELSE 0 6220 END 6221 ) 6222 AS oct_sales, 6223 sum( 6224 CASE 6225 WHEN d_moy = 11 6226 THEN ws_ext_sales_price * ws_quantity 6227 ELSE 0 6228 END 6229 ) 6230 AS nov_sales, 6231 sum( 6232 CASE 6233 WHEN d_moy = 12 6234 THEN ws_ext_sales_price * ws_quantity 6235 ELSE 0 6236 END 6237 ) 6238 AS dec_sales, 6239 sum( 6240 CASE 6241 WHEN d_moy = 1 6242 THEN ws_net_paid_inc_ship * ws_quantity 6243 ELSE 0 6244 END 6245 ) 6246 AS jan_net, 6247 sum( 6248 CASE 6249 WHEN d_moy = 2 6250 THEN ws_net_paid_inc_ship * ws_quantity 6251 ELSE 0 6252 END 6253 ) 6254 AS feb_net, 6255 sum( 6256 CASE 6257 WHEN d_moy = 3 6258 THEN ws_net_paid_inc_ship * ws_quantity 6259 ELSE 0 6260 END 6261 ) 6262 AS mar_net, 6263 sum( 6264 CASE 6265 WHEN d_moy = 4 6266 THEN ws_net_paid_inc_ship * ws_quantity 6267 ELSE 0 6268 END 6269 ) 6270 AS apr_net, 6271 sum( 6272 CASE 6273 WHEN d_moy = 5 6274 THEN ws_net_paid_inc_ship * ws_quantity 6275 ELSE 0 6276 END 6277 ) 6278 AS may_net, 6279 sum( 6280 CASE 6281 WHEN d_moy = 6 6282 THEN ws_net_paid_inc_ship * ws_quantity 6283 ELSE 0 6284 END 6285 ) 6286 AS jun_net, 6287 sum( 6288 CASE 6289 WHEN d_moy = 7 6290 THEN ws_net_paid_inc_ship * ws_quantity 6291 ELSE 0 6292 END 6293 ) 6294 AS jul_net, 6295 sum( 6296 CASE 6297 WHEN d_moy = 8 6298 THEN ws_net_paid_inc_ship * ws_quantity 6299 ELSE 0 6300 END 6301 ) 6302 AS aug_net, 6303 sum( 6304 CASE 6305 WHEN d_moy = 9 6306 THEN ws_net_paid_inc_ship * ws_quantity 6307 ELSE 0 6308 END 6309 ) 6310 AS sep_net, 6311 sum( 6312 CASE 6313 WHEN d_moy = 10 6314 THEN ws_net_paid_inc_ship * ws_quantity 6315 ELSE 0 6316 END 6317 ) 6318 AS oct_net, 6319 sum( 6320 CASE 6321 WHEN d_moy = 11 6322 THEN ws_net_paid_inc_ship * ws_quantity 6323 ELSE 0 6324 END 6325 ) 6326 AS nov_net, 6327 sum( 6328 CASE 6329 WHEN d_moy = 12 6330 THEN ws_net_paid_inc_ship * ws_quantity 6331 ELSE 0 6332 END 6333 ) 6334 AS dec_net 6335 FROM 6336 web_sales, 6337 warehouse, 6338 date_dim, 6339 time_dim, 6340 ship_mode 6341 WHERE 6342 ws_warehouse_sk = w_warehouse_sk 6343 AND ws_sold_date_sk = d_date_sk 6344 AND ws_sold_time_sk = t_time_sk 6345 AND ws_ship_mode_sk = sm_ship_mode_sk 6346 AND d_year = 2001 6347 AND t_time BETWEEN 42970 AND (42970 + 28800) 6348 AND sm_carrier IN ('ORIENTAL', 'BOXBUNDLES') 6349 GROUP BY 6350 w_warehouse_name, 6351 w_warehouse_sq_ft, 6352 w_city, 6353 w_county, 6354 w_state, 6355 w_country, 6356 d_year 6357 UNION ALL 6358 SELECT 6359 w_warehouse_name, 6360 w_warehouse_sq_ft, 6361 w_city, 6362 w_county, 6363 w_state, 6364 w_country, 6365 'ORIENTAL' || ',' || 'BOXBUNDLES' 6366 AS ship_carriers, 6367 d_year AS year, 6368 sum( 6369 CASE 6370 WHEN d_moy = 1 6371 THEN cs_ext_list_price * cs_quantity 6372 ELSE 0 6373 END 6374 ) 6375 AS jan_sales, 6376 sum( 6377 CASE 6378 WHEN d_moy = 2 6379 THEN cs_ext_list_price * cs_quantity 6380 ELSE 0 6381 END 6382 ) 6383 AS feb_sales, 6384 sum( 6385 CASE 6386 WHEN d_moy = 3 6387 THEN cs_ext_list_price * cs_quantity 6388 ELSE 0 6389 END 6390 ) 6391 AS mar_sales, 6392 sum( 6393 CASE 6394 WHEN d_moy = 4 6395 THEN cs_ext_list_price * cs_quantity 6396 ELSE 0 6397 END 6398 ) 6399 AS apr_sales, 6400 sum( 6401 CASE 6402 WHEN d_moy = 5 6403 THEN cs_ext_list_price * cs_quantity 6404 ELSE 0 6405 END 6406 ) 6407 AS may_sales, 6408 sum( 6409 CASE 6410 WHEN d_moy = 6 6411 THEN cs_ext_list_price * cs_quantity 6412 ELSE 0 6413 END 6414 ) 6415 AS jun_sales, 6416 sum( 6417 CASE 6418 WHEN d_moy = 7 6419 THEN cs_ext_list_price * cs_quantity 6420 ELSE 0 6421 END 6422 ) 6423 AS jul_sales, 6424 sum( 6425 CASE 6426 WHEN d_moy = 8 6427 THEN cs_ext_list_price * cs_quantity 6428 ELSE 0 6429 END 6430 ) 6431 AS aug_sales, 6432 sum( 6433 CASE 6434 WHEN d_moy = 9 6435 THEN cs_ext_list_price * cs_quantity 6436 ELSE 0 6437 END 6438 ) 6439 AS sep_sales, 6440 sum( 6441 CASE 6442 WHEN d_moy = 10 6443 THEN cs_ext_list_price * cs_quantity 6444 ELSE 0 6445 END 6446 ) 6447 AS oct_sales, 6448 sum( 6449 CASE 6450 WHEN d_moy = 11 6451 THEN cs_ext_list_price * cs_quantity 6452 ELSE 0 6453 END 6454 ) 6455 AS nov_sales, 6456 sum( 6457 CASE 6458 WHEN d_moy = 12 6459 THEN cs_ext_list_price * cs_quantity 6460 ELSE 0 6461 END 6462 ) 6463 AS dec_sales, 6464 sum( 6465 CASE 6466 WHEN d_moy = 1 6467 THEN cs_net_paid * cs_quantity 6468 ELSE 0 6469 END 6470 ) 6471 AS jan_net, 6472 sum( 6473 CASE 6474 WHEN d_moy = 2 6475 THEN cs_net_paid * cs_quantity 6476 ELSE 0 6477 END 6478 ) 6479 AS feb_net, 6480 sum( 6481 CASE 6482 WHEN d_moy = 3 6483 THEN cs_net_paid * cs_quantity 6484 ELSE 0 6485 END 6486 ) 6487 AS mar_net, 6488 sum( 6489 CASE 6490 WHEN d_moy = 4 6491 THEN cs_net_paid * cs_quantity 6492 ELSE 0 6493 END 6494 ) 6495 AS apr_net, 6496 sum( 6497 CASE 6498 WHEN d_moy = 5 6499 THEN cs_net_paid * cs_quantity 6500 ELSE 0 6501 END 6502 ) 6503 AS may_net, 6504 sum( 6505 CASE 6506 WHEN d_moy = 6 6507 THEN cs_net_paid * cs_quantity 6508 ELSE 0 6509 END 6510 ) 6511 AS jun_net, 6512 sum( 6513 CASE 6514 WHEN d_moy = 7 6515 THEN cs_net_paid * cs_quantity 6516 ELSE 0 6517 END 6518 ) 6519 AS jul_net, 6520 sum( 6521 CASE 6522 WHEN d_moy = 8 6523 THEN cs_net_paid * cs_quantity 6524 ELSE 0 6525 END 6526 ) 6527 AS aug_net, 6528 sum( 6529 CASE 6530 WHEN d_moy = 9 6531 THEN cs_net_paid * cs_quantity 6532 ELSE 0 6533 END 6534 ) 6535 AS sep_net, 6536 sum( 6537 CASE 6538 WHEN d_moy = 10 6539 THEN cs_net_paid * cs_quantity 6540 ELSE 0 6541 END 6542 ) 6543 AS oct_net, 6544 sum( 6545 CASE 6546 WHEN d_moy = 11 6547 THEN cs_net_paid * cs_quantity 6548 ELSE 0 6549 END 6550 ) 6551 AS nov_net, 6552 sum( 6553 CASE 6554 WHEN d_moy = 12 6555 THEN cs_net_paid * cs_quantity 6556 ELSE 0 6557 END 6558 ) 6559 AS dec_net 6560 FROM 6561 catalog_sales, 6562 warehouse, 6563 date_dim, 6564 time_dim, 6565 ship_mode 6566 WHERE 6567 cs_warehouse_sk = w_warehouse_sk 6568 AND cs_sold_date_sk = d_date_sk 6569 AND cs_sold_time_sk = t_time_sk 6570 AND cs_ship_mode_sk = sm_ship_mode_sk 6571 AND d_year = 2001 6572 AND t_time BETWEEN 42970 AND (42970 + 28800) 6573 AND sm_carrier IN ('ORIENTAL', 'BOXBUNDLES') 6574 GROUP BY 6575 w_warehouse_name, 6576 w_warehouse_sq_ft, 6577 w_city, 6578 w_county, 6579 w_state, 6580 w_country, 6581 d_year 6582 ) 6583 AS x 6584 GROUP BY 6585 w_warehouse_name, 6586 w_warehouse_sq_ft, 6587 w_city, 6588 w_county, 6589 w_state, 6590 w_country, 6591 ship_carriers, 6592 year 6593 ORDER BY 6594 w_warehouse_name 6595 LIMIT 6596 100; 6597 ` 6598 6599 query67 = ` 6600 SELECT 6601 * 6602 FROM 6603 ( 6604 SELECT 6605 i_category, 6606 i_class, 6607 i_brand, 6608 i_product_name, 6609 d_year, 6610 d_qoy, 6611 d_moy, 6612 s_store_id, 6613 sumsales, 6614 rank() OVER ( 6615 PARTITION BY 6616 i_category 6617 ORDER BY 6618 sumsales DESC 6619 ) 6620 AS rk 6621 FROM 6622 ( 6623 SELECT 6624 i_category, 6625 i_class, 6626 i_brand, 6627 i_product_name, 6628 d_year, 6629 d_qoy, 6630 d_moy, 6631 s_store_id, 6632 sum( 6633 COALESCE( 6634 ss_sales_price * ss_quantity, 6635 0 6636 ) 6637 ) 6638 AS sumsales 6639 FROM 6640 store_sales, date_dim, store, item 6641 WHERE 6642 ss_sold_date_sk = d_date_sk 6643 AND ss_item_sk = i_item_sk 6644 AND ss_store_sk = s_store_sk 6645 AND d_month_seq BETWEEN 1217 AND (1217 + 11) 6646 GROUP BY 6647 rollup( 6648 i_category, 6649 i_class, 6650 i_brand, 6651 i_product_name, 6652 d_year, 6653 d_qoy, 6654 d_moy, 6655 s_store_id 6656 ) 6657 ) 6658 AS dw1 6659 ) 6660 AS dw2 6661 WHERE 6662 rk <= 100 6663 ORDER BY 6664 i_category, 6665 i_class, 6666 i_brand, 6667 i_product_name, 6668 d_year, 6669 d_qoy, 6670 d_moy, 6671 s_store_id, 6672 sumsales, 6673 rk 6674 LIMIT 6675 100; 6676 ` 6677 6678 query68 = ` 6679 SELECT 6680 c_last_name, 6681 c_first_name, 6682 ca_city, 6683 bought_city, 6684 ss_ticket_number, 6685 extended_price, 6686 extended_tax, 6687 list_price 6688 FROM 6689 ( 6690 SELECT 6691 ss_ticket_number, 6692 ss_customer_sk, 6693 ca_city AS bought_city, 6694 sum(ss_ext_sales_price) AS extended_price, 6695 sum(ss_ext_list_price) AS list_price, 6696 sum(ss_ext_tax) AS extended_tax 6697 FROM 6698 store_sales, 6699 date_dim, 6700 store, 6701 household_demographics, 6702 customer_address 6703 WHERE 6704 store_sales.ss_sold_date_sk = date_dim.d_date_sk 6705 AND store_sales.ss_store_sk = store.s_store_sk 6706 AND store_sales.ss_hdemo_sk 6707 = household_demographics.hd_demo_sk 6708 AND store_sales.ss_addr_sk 6709 = customer_address.ca_address_sk 6710 AND date_dim.d_dom BETWEEN 1 AND 2 6711 AND ( 6712 household_demographics.hd_dep_count = 3 6713 OR household_demographics.hd_vehicle_count 6714 = 4 6715 ) 6716 AND date_dim.d_year 6717 IN (1998, 1998 + 1, 1998 + 2) 6718 AND store.s_city IN ('Fairview', 'Midway') 6719 GROUP BY 6720 ss_ticket_number, 6721 ss_customer_sk, 6722 ss_addr_sk, 6723 ca_city 6724 ) 6725 AS dn, 6726 customer, 6727 customer_address AS current_addr 6728 WHERE 6729 ss_customer_sk = c_customer_sk 6730 AND customer.c_current_addr_sk 6731 = current_addr.ca_address_sk 6732 AND current_addr.ca_city != bought_city 6733 ORDER BY 6734 c_last_name, ss_ticket_number 6735 LIMIT 6736 100; 6737 ` 6738 6739 query69 = ` 6740 SELECT 6741 cd_gender, 6742 cd_marital_status, 6743 cd_education_status, 6744 count(*) AS cnt1, 6745 cd_purchase_estimate, 6746 count(*) AS cnt2, 6747 cd_credit_rating, 6748 count(*) AS cnt3 6749 FROM 6750 customer AS c, 6751 customer_address AS ca, 6752 customer_demographics 6753 WHERE 6754 c.c_current_addr_sk = ca.ca_address_sk 6755 AND ca_state IN ('IL', 'TX', 'ME') 6756 AND cd_demo_sk = c.c_current_cdemo_sk 6757 AND EXISTS( 6758 SELECT 6759 * 6760 FROM 6761 store_sales, date_dim 6762 WHERE 6763 c.c_customer_sk = ss_customer_sk 6764 AND ss_sold_date_sk = d_date_sk 6765 AND d_year = 2002 6766 AND d_moy BETWEEN 1 AND (1 + 2) 6767 ) 6768 AND ( 6769 NOT 6770 EXISTS( 6771 SELECT 6772 * 6773 FROM 6774 web_sales, date_dim 6775 WHERE 6776 c.c_customer_sk 6777 = ws_bill_customer_sk 6778 AND ws_sold_date_sk = d_date_sk 6779 AND d_year = 2002 6780 AND d_moy BETWEEN 1 AND (1 + 2) 6781 ) 6782 AND NOT 6783 EXISTS( 6784 SELECT 6785 * 6786 FROM 6787 catalog_sales, date_dim 6788 WHERE 6789 c.c_customer_sk 6790 = cs_ship_customer_sk 6791 AND cs_sold_date_sk = d_date_sk 6792 AND d_year = 2002 6793 AND d_moy BETWEEN 1 AND (1 + 2) 6794 ) 6795 ) 6796 GROUP BY 6797 cd_gender, 6798 cd_marital_status, 6799 cd_education_status, 6800 cd_purchase_estimate, 6801 cd_credit_rating 6802 ORDER BY 6803 cd_gender, 6804 cd_marital_status, 6805 cd_education_status, 6806 cd_purchase_estimate, 6807 cd_credit_rating 6808 LIMIT 6809 100; 6810 ` 6811 6812 // TODO(yuzefovich): modify it to be parsed by CRDB. 6813 query70 = ` 6814 select 6815 sum(ss_net_profit) as total_sum 6816 ,s_state 6817 ,s_county 6818 ,grouping(s_state)+grouping(s_county) as lochierarchy 6819 ,rank() over ( 6820 partition by grouping(s_state)+grouping(s_county), 6821 case when grouping(s_county) = 0 then s_state end 6822 order by sum(ss_net_profit) desc) as rank_within_parent 6823 from 6824 store_sales 6825 ,date_dim d1 6826 ,store 6827 where 6828 d1.d_month_seq between 1220 and 1220+11 6829 and d1.d_date_sk = ss_sold_date_sk 6830 and s_store_sk = ss_store_sk 6831 and s_state in 6832 ( select s_state 6833 from (select s_state as s_state, 6834 rank() over ( partition by s_state order by sum(ss_net_profit) desc) as ranking 6835 from store_sales, store, date_dim 6836 where d_month_seq between 1220 and 1220+11 6837 and d_date_sk = ss_sold_date_sk 6838 and s_store_sk = ss_store_sk 6839 group by s_state 6840 ) tmp1 6841 where ranking <= 5 6842 ) 6843 group by rollup(s_state,s_county) 6844 order by 6845 lochierarchy desc 6846 ,case when lochierarchy = 0 then s_state end 6847 ,rank_within_parent 6848 limit 100; 6849 ` 6850 6851 // NOTE: this query has been modified by appending two extra columns to 6852 // ORDER BY clause so that it had deterministic output. 6853 query71 = ` 6854 SELECT 6855 i_brand_id AS brand_id, 6856 i_brand AS brand, 6857 t_hour, 6858 t_minute, 6859 sum(ext_price) AS ext_price 6860 FROM 6861 item, 6862 ( 6863 SELECT 6864 ws_ext_sales_price AS ext_price, 6865 ws_sold_date_sk AS sold_date_sk, 6866 ws_item_sk AS sold_item_sk, 6867 ws_sold_time_sk AS time_sk 6868 FROM 6869 web_sales, date_dim 6870 WHERE 6871 d_date_sk = ws_sold_date_sk 6872 AND d_moy = 12 6873 AND d_year = 2002 6874 UNION ALL 6875 SELECT 6876 cs_ext_sales_price AS ext_price, 6877 cs_sold_date_sk AS sold_date_sk, 6878 cs_item_sk AS sold_item_sk, 6879 cs_sold_time_sk AS time_sk 6880 FROM 6881 catalog_sales, date_dim 6882 WHERE 6883 d_date_sk = cs_sold_date_sk 6884 AND d_moy = 12 6885 AND d_year = 2002 6886 UNION ALL 6887 SELECT 6888 ss_ext_sales_price AS ext_price, 6889 ss_sold_date_sk AS sold_date_sk, 6890 ss_item_sk AS sold_item_sk, 6891 ss_sold_time_sk AS time_sk 6892 FROM 6893 store_sales, date_dim 6894 WHERE 6895 d_date_sk = ss_sold_date_sk 6896 AND d_moy = 12 6897 AND d_year = 2002 6898 ) 6899 AS tmp, 6900 time_dim 6901 WHERE 6902 sold_item_sk = i_item_sk 6903 AND i_manager_id = 1 6904 AND time_sk = t_time_sk 6905 AND ( 6906 t_meal_time = 'breakfast' 6907 OR t_meal_time = 'dinner' 6908 ) 6909 GROUP BY 6910 i_brand, i_brand_id, t_hour, t_minute 6911 ORDER BY 6912 ext_price DESC, i_brand_id, t_hour, t_minute; 6913 ` 6914 6915 query72 = ` 6916 SELECT 6917 i_item_desc, 6918 w_warehouse_name, 6919 d1.d_week_seq, 6920 sum(CASE WHEN p_promo_sk IS NULL THEN 1 ELSE 0 END) 6921 AS no_promo, 6922 sum(CASE WHEN p_promo_sk IS NOT NULL THEN 1 ELSE 0 END) 6923 AS promo, 6924 count(*) AS total_cnt 6925 FROM 6926 catalog_sales 6927 JOIN inventory ON cs_item_sk = inv_item_sk 6928 JOIN warehouse ON w_warehouse_sk = inv_warehouse_sk 6929 JOIN item ON i_item_sk = cs_item_sk 6930 JOIN customer_demographics ON 6931 cs_bill_cdemo_sk = cd_demo_sk 6932 JOIN household_demographics ON 6933 cs_bill_hdemo_sk = hd_demo_sk 6934 JOIN date_dim AS d1 ON cs_sold_date_sk = d1.d_date_sk 6935 JOIN date_dim AS d2 ON inv_date_sk = d2.d_date_sk 6936 JOIN date_dim AS d3 ON cs_ship_date_sk = d3.d_date_sk 6937 LEFT JOIN promotion ON cs_promo_sk = p_promo_sk 6938 LEFT JOIN catalog_returns ON 6939 cr_item_sk = cs_item_sk 6940 AND cr_order_number = cs_order_number 6941 WHERE 6942 d1.d_week_seq = d2.d_week_seq 6943 AND inv_quantity_on_hand < cs_quantity 6944 AND d3.d_date > d1.d_date + 5 6945 AND hd_buy_potential = '1001-5000' 6946 AND d1.d_year = 1998 6947 AND cd_marital_status = 'S' 6948 GROUP BY 6949 i_item_desc, w_warehouse_name, d1.d_week_seq 6950 ORDER BY 6951 total_cnt DESC, 6952 i_item_desc, 6953 w_warehouse_name, 6954 d_week_seq 6955 LIMIT 6956 100; 6957 ` 6958 6959 query73 = ` 6960 SELECT 6961 c_last_name, 6962 c_first_name, 6963 c_salutation, 6964 c_preferred_cust_flag, 6965 ss_ticket_number, 6966 cnt 6967 FROM 6968 ( 6969 SELECT 6970 ss_ticket_number, 6971 ss_customer_sk, 6972 count(*) AS cnt 6973 FROM 6974 store_sales, 6975 date_dim, 6976 store, 6977 household_demographics 6978 WHERE 6979 store_sales.ss_sold_date_sk = date_dim.d_date_sk 6980 AND store_sales.ss_store_sk = store.s_store_sk 6981 AND store_sales.ss_hdemo_sk 6982 = household_demographics.hd_demo_sk 6983 AND date_dim.d_dom BETWEEN 1 AND 2 6984 AND ( 6985 household_demographics.hd_buy_potential 6986 = '1001-5000' 6987 OR household_demographics.hd_buy_potential 6988 = '5001-10000' 6989 ) 6990 AND household_demographics.hd_vehicle_count > 0 6991 AND CASE 6992 WHEN household_demographics.hd_vehicle_count 6993 > 0 6994 THEN household_demographics.hd_dep_count 6995 / household_demographics.hd_vehicle_count 6996 ELSE NULL 6997 END 6998 > 1 6999 AND date_dim.d_year 7000 IN (2000, 2000 + 1, 2000 + 2) 7001 AND store.s_county 7002 IN ( 7003 'Williamson County', 7004 'Williamson County', 7005 'Williamson County', 7006 'Williamson County' 7007 ) 7008 GROUP BY 7009 ss_ticket_number, ss_customer_sk 7010 ) 7011 AS dj, 7012 customer 7013 WHERE 7014 ss_customer_sk = c_customer_sk AND cnt BETWEEN 1 AND 5 7015 ORDER BY 7016 cnt DESC, c_last_name ASC; 7017 ` 7018 7019 query74 = ` 7020 WITH 7021 year_total 7022 AS ( 7023 SELECT 7024 c_customer_id AS customer_id, 7025 c_first_name AS customer_first_name, 7026 c_last_name AS customer_last_name, 7027 d_year AS year, 7028 max(ss_net_paid) AS year_total, 7029 's' AS sale_type 7030 FROM 7031 customer, store_sales, date_dim 7032 WHERE 7033 c_customer_sk = ss_customer_sk 7034 AND ss_sold_date_sk = d_date_sk 7035 AND d_year IN (1999, 1999 + 1) 7036 GROUP BY 7037 c_customer_id, 7038 c_first_name, 7039 c_last_name, 7040 d_year 7041 UNION ALL 7042 SELECT 7043 c_customer_id AS customer_id, 7044 c_first_name AS customer_first_name, 7045 c_last_name AS customer_last_name, 7046 d_year AS year, 7047 max(ws_net_paid) AS year_total, 7048 'w' AS sale_type 7049 FROM 7050 customer, web_sales, date_dim 7051 WHERE 7052 c_customer_sk = ws_bill_customer_sk 7053 AND ws_sold_date_sk = d_date_sk 7054 AND d_year IN (1999, 1999 + 1) 7055 GROUP BY 7056 c_customer_id, 7057 c_first_name, 7058 c_last_name, 7059 d_year 7060 ) 7061 SELECT 7062 t_s_secyear.customer_id, 7063 t_s_secyear.customer_first_name, 7064 t_s_secyear.customer_last_name 7065 FROM 7066 year_total AS t_s_firstyear, 7067 year_total AS t_s_secyear, 7068 year_total AS t_w_firstyear, 7069 year_total AS t_w_secyear 7070 WHERE 7071 t_s_secyear.customer_id = t_s_firstyear.customer_id 7072 AND t_s_firstyear.customer_id = t_w_secyear.customer_id 7073 AND t_s_firstyear.customer_id 7074 = t_w_firstyear.customer_id 7075 AND t_s_firstyear.sale_type = 's' 7076 AND t_w_firstyear.sale_type = 'w' 7077 AND t_s_secyear.sale_type = 's' 7078 AND t_w_secyear.sale_type = 'w' 7079 AND t_s_firstyear.year = 1999 7080 AND t_s_secyear.year = 1999 + 1 7081 AND t_w_firstyear.year = 1999 7082 AND t_w_secyear.year = 1999 + 1 7083 AND t_s_firstyear.year_total > 0 7084 AND t_w_firstyear.year_total > 0 7085 AND CASE 7086 WHEN t_w_firstyear.year_total > 0 7087 THEN t_w_secyear.year_total 7088 / t_w_firstyear.year_total 7089 ELSE NULL 7090 END 7091 > CASE 7092 WHEN t_s_firstyear.year_total > 0 7093 THEN t_s_secyear.year_total 7094 / t_s_firstyear.year_total 7095 ELSE NULL 7096 END 7097 ORDER BY 7098 1, 3, 2 7099 LIMIT 7100 100; 7101 ` 7102 7103 query75 = ` 7104 WITH 7105 all_sales 7106 AS ( 7107 SELECT 7108 d_year, 7109 i_brand_id, 7110 i_class_id, 7111 i_category_id, 7112 i_manufact_id, 7113 sum(sales_cnt) AS sales_cnt, 7114 sum(sales_amt) AS sales_amt 7115 FROM 7116 ( 7117 SELECT 7118 d_year, 7119 i_brand_id, 7120 i_class_id, 7121 i_category_id, 7122 i_manufact_id, 7123 cs_quantity 7124 - COALESCE(cr_return_quantity, 0) 7125 AS sales_cnt, 7126 cs_ext_sales_price 7127 - COALESCE(cr_return_amount, 0.0) 7128 AS sales_amt 7129 FROM 7130 catalog_sales 7131 JOIN item ON i_item_sk = cs_item_sk 7132 JOIN date_dim ON 7133 d_date_sk = cs_sold_date_sk 7134 LEFT JOIN catalog_returns ON 7135 cs_order_number 7136 = cr_order_number 7137 AND cs_item_sk = cr_item_sk 7138 WHERE 7139 i_category = 'Sports' 7140 UNION 7141 SELECT 7142 d_year, 7143 i_brand_id, 7144 i_class_id, 7145 i_category_id, 7146 i_manufact_id, 7147 ss_quantity 7148 - COALESCE( 7149 sr_return_quantity, 7150 0 7151 ) 7152 AS sales_cnt, 7153 ss_ext_sales_price 7154 - COALESCE(sr_return_amt, 0.0) 7155 AS sales_amt 7156 FROM 7157 store_sales 7158 JOIN item ON 7159 i_item_sk = ss_item_sk 7160 JOIN date_dim ON 7161 d_date_sk 7162 = ss_sold_date_sk 7163 LEFT JOIN store_returns ON 7164 ss_ticket_number 7165 = sr_ticket_number 7166 AND ss_item_sk 7167 = sr_item_sk 7168 WHERE 7169 i_category = 'Sports' 7170 UNION 7171 SELECT 7172 d_year, 7173 i_brand_id, 7174 i_class_id, 7175 i_category_id, 7176 i_manufact_id, 7177 ws_quantity 7178 - COALESCE( 7179 wr_return_quantity, 7180 0 7181 ) 7182 AS sales_cnt, 7183 ws_ext_sales_price 7184 - COALESCE(wr_return_amt, 0.0) 7185 AS sales_amt 7186 FROM 7187 web_sales 7188 JOIN item ON 7189 i_item_sk = ws_item_sk 7190 JOIN date_dim ON 7191 d_date_sk 7192 = ws_sold_date_sk 7193 LEFT JOIN web_returns ON 7194 ws_order_number 7195 = wr_order_number 7196 AND ws_item_sk 7197 = wr_item_sk 7198 WHERE 7199 i_category = 'Sports' 7200 ) 7201 AS sales_detail 7202 GROUP BY 7203 d_year, 7204 i_brand_id, 7205 i_class_id, 7206 i_category_id, 7207 i_manufact_id 7208 ) 7209 SELECT 7210 prev_yr.d_year AS prev_year, 7211 curr_yr.d_year AS year, 7212 curr_yr.i_brand_id, 7213 curr_yr.i_class_id, 7214 curr_yr.i_category_id, 7215 curr_yr.i_manufact_id, 7216 prev_yr.sales_cnt AS prev_yr_cnt, 7217 curr_yr.sales_cnt AS curr_yr_cnt, 7218 curr_yr.sales_cnt - prev_yr.sales_cnt AS sales_cnt_diff, 7219 curr_yr.sales_amt - prev_yr.sales_amt AS sales_amt_diff 7220 FROM 7221 all_sales AS curr_yr, all_sales AS prev_yr 7222 WHERE 7223 curr_yr.i_brand_id = prev_yr.i_brand_id 7224 AND curr_yr.i_class_id = prev_yr.i_class_id 7225 AND curr_yr.i_category_id = prev_yr.i_category_id 7226 AND curr_yr.i_manufact_id = prev_yr.i_manufact_id 7227 AND curr_yr.d_year = 2002 7228 AND prev_yr.d_year = 2002 - 1 7229 AND CAST(curr_yr.sales_cnt AS DECIMAL(17,2)) 7230 / CAST(prev_yr.sales_cnt AS DECIMAL(17,2)) 7231 < 0.9 7232 ORDER BY 7233 sales_cnt_diff, sales_amt_diff 7234 LIMIT 7235 100; 7236 ` 7237 7238 query76 = ` 7239 SELECT 7240 channel, 7241 col_name, 7242 d_year, 7243 d_qoy, 7244 i_category, 7245 count(*) AS sales_cnt, 7246 sum(ext_sales_price) AS sales_amt 7247 FROM 7248 ( 7249 SELECT 7250 'store' AS channel, 7251 'ss_customer_sk' AS col_name, 7252 d_year, 7253 d_qoy, 7254 i_category, 7255 ss_ext_sales_price AS ext_sales_price 7256 FROM 7257 store_sales, item, date_dim 7258 WHERE 7259 ss_customer_sk IS NULL 7260 AND ss_sold_date_sk = d_date_sk 7261 AND ss_item_sk = i_item_sk 7262 UNION ALL 7263 SELECT 7264 'web' AS channel, 7265 'ws_promo_sk' AS col_name, 7266 d_year, 7267 d_qoy, 7268 i_category, 7269 ws_ext_sales_price AS ext_sales_price 7270 FROM 7271 web_sales, item, date_dim 7272 WHERE 7273 ws_promo_sk IS NULL 7274 AND ws_sold_date_sk = d_date_sk 7275 AND ws_item_sk = i_item_sk 7276 UNION ALL 7277 SELECT 7278 'catalog' AS channel, 7279 'cs_bill_customer_sk' AS col_name, 7280 d_year, 7281 d_qoy, 7282 i_category, 7283 cs_ext_sales_price AS ext_sales_price 7284 FROM 7285 catalog_sales, item, date_dim 7286 WHERE 7287 cs_bill_customer_sk IS NULL 7288 AND cs_sold_date_sk = d_date_sk 7289 AND cs_item_sk = i_item_sk 7290 ) 7291 AS foo 7292 GROUP BY 7293 channel, col_name, d_year, d_qoy, i_category 7294 ORDER BY 7295 channel, col_name, d_year, d_qoy, i_category 7296 LIMIT 7297 100; 7298 ` 7299 7300 // NOTE: I added conversion of 30 days to an interval. 7301 query77 = ` 7302 WITH 7303 ss 7304 AS ( 7305 SELECT 7306 s_store_sk, 7307 sum(ss_ext_sales_price) AS sales, 7308 sum(ss_net_profit) AS profit 7309 FROM 7310 store_sales, date_dim, store 7311 WHERE 7312 ss_sold_date_sk = d_date_sk 7313 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7314 AND ss_store_sk = s_store_sk 7315 GROUP BY 7316 s_store_sk 7317 ), 7318 sr 7319 AS ( 7320 SELECT 7321 s_store_sk, 7322 sum(sr_return_amt) AS returns, 7323 sum(sr_net_loss) AS profit_loss 7324 FROM 7325 store_returns, date_dim, store 7326 WHERE 7327 sr_returned_date_sk = d_date_sk 7328 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7329 AND sr_store_sk = s_store_sk 7330 GROUP BY 7331 s_store_sk 7332 ), 7333 cs 7334 AS ( 7335 SELECT 7336 cs_call_center_sk, 7337 sum(cs_ext_sales_price) AS sales, 7338 sum(cs_net_profit) AS profit 7339 FROM 7340 catalog_sales, date_dim 7341 WHERE 7342 cs_sold_date_sk = d_date_sk 7343 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7344 GROUP BY 7345 cs_call_center_sk 7346 ), 7347 cr 7348 AS ( 7349 SELECT 7350 cr_call_center_sk, 7351 sum(cr_return_amount) AS returns, 7352 sum(cr_net_loss) AS profit_loss 7353 FROM 7354 catalog_returns, date_dim 7355 WHERE 7356 cr_returned_date_sk = d_date_sk 7357 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7358 GROUP BY 7359 cr_call_center_sk 7360 ), 7361 ws 7362 AS ( 7363 SELECT 7364 wp_web_page_sk, 7365 sum(ws_ext_sales_price) AS sales, 7366 sum(ws_net_profit) AS profit 7367 FROM 7368 web_sales, date_dim, web_page 7369 WHERE 7370 ws_sold_date_sk = d_date_sk 7371 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7372 AND ws_web_page_sk = wp_web_page_sk 7373 GROUP BY 7374 wp_web_page_sk 7375 ), 7376 wr 7377 AS ( 7378 SELECT 7379 wp_web_page_sk, 7380 sum(wr_return_amt) AS returns, 7381 sum(wr_net_loss) AS profit_loss 7382 FROM 7383 web_returns, date_dim, web_page 7384 WHERE 7385 wr_returned_date_sk = d_date_sk 7386 AND d_date BETWEEN CAST('2000-08-10' AS DATE) AND (CAST('2000-08-10' AS DATE) + '30 days'::INTERVAL) 7387 AND wr_web_page_sk = wp_web_page_sk 7388 GROUP BY 7389 wp_web_page_sk 7390 ) 7391 SELECT 7392 channel, 7393 id, 7394 sum(sales) AS sales, 7395 sum(returns) AS returns, 7396 sum(profit) AS profit 7397 FROM 7398 ( 7399 SELECT 7400 'store channel' AS channel, 7401 ss.s_store_sk AS id, 7402 sales, 7403 COALESCE(returns, 0) AS returns, 7404 profit - COALESCE(profit_loss, 0) AS profit 7405 FROM 7406 ss LEFT JOIN sr ON ss.s_store_sk = sr.s_store_sk 7407 UNION ALL 7408 SELECT 7409 'catalog channel' AS channel, 7410 cs_call_center_sk AS id, 7411 sales, 7412 returns, 7413 profit - profit_loss AS profit 7414 FROM 7415 cs, cr 7416 UNION ALL 7417 SELECT 7418 'web channel' AS channel, 7419 ws.wp_web_page_sk AS id, 7420 sales, 7421 COALESCE(returns, 0) AS returns, 7422 profit - COALESCE(profit_loss, 0) AS profit 7423 FROM 7424 ws 7425 LEFT JOIN wr ON 7426 ws.wp_web_page_sk 7427 = wr.wp_web_page_sk 7428 ) 7429 AS x 7430 GROUP BY 7431 rollup(channel, id) 7432 ORDER BY 7433 channel, id 7434 LIMIT 7435 100; 7436 ` 7437 7438 query78 = ` 7439 WITH 7440 ws 7441 AS ( 7442 SELECT 7443 d_year AS ws_sold_year, 7444 ws_item_sk, 7445 ws_bill_customer_sk AS ws_customer_sk, 7446 sum(ws_quantity) AS ws_qty, 7447 sum(ws_wholesale_cost) AS ws_wc, 7448 sum(ws_sales_price) AS ws_sp 7449 FROM 7450 web_sales 7451 LEFT JOIN web_returns ON 7452 wr_order_number = ws_order_number 7453 AND ws_item_sk = wr_item_sk 7454 JOIN date_dim ON ws_sold_date_sk = d_date_sk 7455 WHERE 7456 wr_order_number IS NULL 7457 GROUP BY 7458 d_year, ws_item_sk, ws_bill_customer_sk 7459 ), 7460 cs 7461 AS ( 7462 SELECT 7463 d_year AS cs_sold_year, 7464 cs_item_sk, 7465 cs_bill_customer_sk AS cs_customer_sk, 7466 sum(cs_quantity) AS cs_qty, 7467 sum(cs_wholesale_cost) AS cs_wc, 7468 sum(cs_sales_price) AS cs_sp 7469 FROM 7470 catalog_sales 7471 LEFT JOIN catalog_returns ON 7472 cr_order_number = cs_order_number 7473 AND cs_item_sk = cr_item_sk 7474 JOIN date_dim ON cs_sold_date_sk = d_date_sk 7475 WHERE 7476 cr_order_number IS NULL 7477 GROUP BY 7478 d_year, cs_item_sk, cs_bill_customer_sk 7479 ), 7480 ss 7481 AS ( 7482 SELECT 7483 d_year AS ss_sold_year, 7484 ss_item_sk, 7485 ss_customer_sk, 7486 sum(ss_quantity) AS ss_qty, 7487 sum(ss_wholesale_cost) AS ss_wc, 7488 sum(ss_sales_price) AS ss_sp 7489 FROM 7490 store_sales 7491 LEFT JOIN store_returns ON 7492 sr_ticket_number = ss_ticket_number 7493 AND ss_item_sk = sr_item_sk 7494 JOIN date_dim ON ss_sold_date_sk = d_date_sk 7495 WHERE 7496 sr_ticket_number IS NULL 7497 GROUP BY 7498 d_year, ss_item_sk, ss_customer_sk 7499 ) 7500 SELECT 7501 ss_customer_sk, 7502 round( 7503 ss_qty 7504 / (COALESCE(ws_qty, 0) + COALESCE(cs_qty, 0)), 7505 2 7506 ) 7507 AS ratio, 7508 ss_qty AS store_qty, 7509 ss_wc AS store_wholesale_cost, 7510 ss_sp AS store_sales_price, 7511 COALESCE(ws_qty, 0) + COALESCE(cs_qty, 0) 7512 AS other_chan_qty, 7513 COALESCE(ws_wc, 0) + COALESCE(cs_wc, 0) 7514 AS other_chan_wholesale_cost, 7515 COALESCE(ws_sp, 0) + COALESCE(cs_sp, 0) 7516 AS other_chan_sales_price 7517 FROM 7518 ss 7519 LEFT JOIN ws ON 7520 ws_sold_year = ss_sold_year 7521 AND ws_item_sk = ss_item_sk 7522 AND ws_customer_sk = ss_customer_sk 7523 LEFT JOIN cs ON 7524 cs_sold_year = ss_sold_year 7525 AND cs_item_sk = ss_item_sk 7526 AND cs_customer_sk = ss_customer_sk 7527 WHERE 7528 (COALESCE(ws_qty, 0) > 0 OR COALESCE(cs_qty, 0) > 0) 7529 AND ss_sold_year = 1998 7530 ORDER BY 7531 ss_customer_sk, 7532 ss_qty DESC, 7533 ss_wc DESC, 7534 ss_sp DESC, 7535 other_chan_qty, 7536 other_chan_wholesale_cost, 7537 other_chan_sales_price, 7538 ratio 7539 LIMIT 7540 100; 7541 ` 7542 7543 // NOTE: this query has been modified by appending one extra column to 7544 // ORDER BY clause so that it had deterministic output. 7545 query79 = ` 7546 SELECT 7547 c_last_name, 7548 c_first_name, 7549 substr(s_city, 1, 30), 7550 ss_ticket_number, 7551 amt, 7552 profit 7553 FROM 7554 ( 7555 SELECT 7556 ss_ticket_number, 7557 ss_customer_sk, 7558 store.s_city, 7559 sum(ss_coupon_amt) AS amt, 7560 sum(ss_net_profit) AS profit 7561 FROM 7562 store_sales, 7563 date_dim, 7564 store, 7565 household_demographics 7566 WHERE 7567 store_sales.ss_sold_date_sk = date_dim.d_date_sk 7568 AND store_sales.ss_store_sk = store.s_store_sk 7569 AND store_sales.ss_hdemo_sk 7570 = household_demographics.hd_demo_sk 7571 AND ( 7572 household_demographics.hd_dep_count = 7 7573 OR household_demographics.hd_vehicle_count 7574 > -1 7575 ) 7576 AND date_dim.d_dow = 1 7577 AND date_dim.d_year 7578 IN (2000, 2000 + 1, 2000 + 2) 7579 AND store.s_number_employees BETWEEN 200 AND 295 7580 GROUP BY 7581 ss_ticket_number, 7582 ss_customer_sk, 7583 ss_addr_sk, 7584 store.s_city 7585 ) 7586 AS ms, 7587 customer 7588 WHERE 7589 ss_customer_sk = c_customer_sk 7590 ORDER BY 7591 c_last_name, c_first_name, substr(s_city, 1, 30), profit, ss_ticket_number 7592 LIMIT 7593 100; 7594 ` 7595 7596 // NOTE: I added conversion of 30 days to an interval. 7597 query80 = ` 7598 WITH 7599 ssr 7600 AS ( 7601 SELECT 7602 s_store_id AS store_id, 7603 sum(ss_ext_sales_price) AS sales, 7604 sum(COALESCE(sr_return_amt, 0)) AS returns, 7605 sum( 7606 ss_net_profit - COALESCE(sr_net_loss, 0) 7607 ) 7608 AS profit 7609 FROM 7610 store_sales 7611 LEFT JOIN store_returns ON 7612 ss_item_sk = sr_item_sk 7613 AND ss_ticket_number 7614 = sr_ticket_number, 7615 date_dim, 7616 store, 7617 item, 7618 promotion 7619 WHERE 7620 ss_sold_date_sk = d_date_sk 7621 AND d_date BETWEEN CAST('2002-08-14' AS DATE) AND (CAST('2002-08-14' AS DATE) + '30 days'::INTERVAL) 7622 AND ss_store_sk = s_store_sk 7623 AND ss_item_sk = i_item_sk 7624 AND i_current_price > 50 7625 AND ss_promo_sk = p_promo_sk 7626 AND p_channel_tv = 'N' 7627 GROUP BY 7628 s_store_id 7629 ), 7630 csr 7631 AS ( 7632 SELECT 7633 cp_catalog_page_id AS catalog_page_id, 7634 sum(cs_ext_sales_price) AS sales, 7635 sum(COALESCE(cr_return_amount, 0)) 7636 AS returns, 7637 sum( 7638 cs_net_profit - COALESCE(cr_net_loss, 0) 7639 ) 7640 AS profit 7641 FROM 7642 catalog_sales 7643 LEFT JOIN catalog_returns ON 7644 cs_item_sk = cr_item_sk 7645 AND cs_order_number 7646 = cr_order_number, 7647 date_dim, 7648 catalog_page, 7649 item, 7650 promotion 7651 WHERE 7652 cs_sold_date_sk = d_date_sk 7653 AND d_date BETWEEN CAST('2002-08-14' AS DATE) AND (CAST('2002-08-14' AS DATE) + '30 days'::INTERVAL) 7654 AND cs_catalog_page_sk = cp_catalog_page_sk 7655 AND cs_item_sk = i_item_sk 7656 AND i_current_price > 50 7657 AND cs_promo_sk = p_promo_sk 7658 AND p_channel_tv = 'N' 7659 GROUP BY 7660 cp_catalog_page_id 7661 ), 7662 wsr 7663 AS ( 7664 SELECT 7665 web_site_id, 7666 sum(ws_ext_sales_price) AS sales, 7667 sum(COALESCE(wr_return_amt, 0)) AS returns, 7668 sum( 7669 ws_net_profit - COALESCE(wr_net_loss, 0) 7670 ) 7671 AS profit 7672 FROM 7673 web_sales 7674 LEFT JOIN web_returns ON 7675 ws_item_sk = wr_item_sk 7676 AND ws_order_number 7677 = wr_order_number, 7678 date_dim, 7679 web_site, 7680 item, 7681 promotion 7682 WHERE 7683 ws_sold_date_sk = d_date_sk 7684 AND d_date BETWEEN CAST('2002-08-14' AS DATE) AND (CAST('2002-08-14' AS DATE) + '30 days'::INTERVAL) 7685 AND ws_web_site_sk = web_site_sk 7686 AND ws_item_sk = i_item_sk 7687 AND i_current_price > 50 7688 AND ws_promo_sk = p_promo_sk 7689 AND p_channel_tv = 'N' 7690 GROUP BY 7691 web_site_id 7692 ) 7693 SELECT 7694 channel, 7695 id, 7696 sum(sales) AS sales, 7697 sum(returns) AS returns, 7698 sum(profit) AS profit 7699 FROM 7700 ( 7701 SELECT 7702 'store channel' AS channel, 7703 'store' || store_id AS id, 7704 sales, 7705 returns, 7706 profit 7707 FROM 7708 ssr 7709 UNION ALL 7710 SELECT 7711 'catalog channel' AS channel, 7712 'catalog_page' || catalog_page_id AS id, 7713 sales, 7714 returns, 7715 profit 7716 FROM 7717 csr 7718 UNION ALL 7719 SELECT 7720 'web channel' AS channel, 7721 'web_site' || web_site_id AS id, 7722 sales, 7723 returns, 7724 profit 7725 FROM 7726 wsr 7727 ) 7728 AS x 7729 GROUP BY 7730 rollup(channel, id) 7731 ORDER BY 7732 channel, id 7733 LIMIT 7734 100; 7735 ` 7736 7737 query81 = ` 7738 WITH 7739 customer_total_return 7740 AS ( 7741 SELECT 7742 cr_returning_customer_sk AS ctr_customer_sk, 7743 ca_state AS ctr_state, 7744 sum(cr_return_amt_inc_tax) 7745 AS ctr_total_return 7746 FROM 7747 catalog_returns, date_dim, customer_address 7748 WHERE 7749 cr_returned_date_sk = d_date_sk 7750 AND d_year = 2001 7751 AND cr_returning_addr_sk = ca_address_sk 7752 GROUP BY 7753 cr_returning_customer_sk, ca_state 7754 ) 7755 SELECT 7756 c_customer_id, 7757 c_salutation, 7758 c_first_name, 7759 c_last_name, 7760 ca_street_number, 7761 ca_street_name, 7762 ca_street_type, 7763 ca_suite_number, 7764 ca_city, 7765 ca_county, 7766 ca_state, 7767 ca_zip, 7768 ca_country, 7769 ca_gmt_offset, 7770 ca_location_type, 7771 ctr_total_return 7772 FROM 7773 customer_total_return AS ctr1, 7774 customer_address, 7775 customer 7776 WHERE 7777 ctr1.ctr_total_return 7778 > ( 7779 SELECT 7780 avg(ctr_total_return) * 1.2 7781 FROM 7782 customer_total_return AS ctr2 7783 WHERE 7784 ctr1.ctr_state = ctr2.ctr_state 7785 ) 7786 AND ca_address_sk = c_current_addr_sk 7787 AND ca_state = 'TN' 7788 AND ctr1.ctr_customer_sk = c_customer_sk 7789 ORDER BY 7790 c_customer_id, 7791 c_salutation, 7792 c_first_name, 7793 c_last_name, 7794 ca_street_number, 7795 ca_street_name, 7796 ca_street_type, 7797 ca_suite_number, 7798 ca_city, 7799 ca_county, 7800 ca_state, 7801 ca_zip, 7802 ca_country, 7803 ca_gmt_offset, 7804 ca_location_type, 7805 ctr_total_return 7806 LIMIT 7807 100; 7808 ` 7809 7810 // NOTE: I added conversion of 60 days to an interval. 7811 query82 = ` 7812 SELECT 7813 i_item_id, i_item_desc, i_current_price 7814 FROM 7815 item, inventory, date_dim, store_sales 7816 WHERE 7817 i_current_price BETWEEN 58 AND (58 + 30) 7818 AND inv_item_sk = i_item_sk 7819 AND d_date_sk = inv_date_sk 7820 AND d_date BETWEEN CAST('2001-01-13' AS DATE) AND (CAST('2001-01-13' AS DATE) + '60 days'::INTERVAL) 7821 AND i_manufact_id IN (259, 559, 580, 485) 7822 AND inv_quantity_on_hand BETWEEN 100 AND 500 7823 AND ss_item_sk = i_item_sk 7824 GROUP BY 7825 i_item_id, i_item_desc, i_current_price 7826 ORDER BY 7827 i_item_id 7828 LIMIT 7829 100; 7830 ` 7831 7832 query83 = ` 7833 WITH 7834 sr_items 7835 AS ( 7836 SELECT 7837 i_item_id AS item_id, 7838 sum(sr_return_quantity) AS sr_item_qty 7839 FROM 7840 store_returns, item, date_dim 7841 WHERE 7842 sr_item_sk = i_item_sk 7843 AND d_date 7844 IN ( 7845 SELECT 7846 d_date 7847 FROM 7848 date_dim 7849 WHERE 7850 d_week_seq 7851 IN ( 7852 SELECT 7853 d_week_seq 7854 FROM 7855 date_dim 7856 WHERE 7857 d_date 7858 IN ( 7859 '2001-07-13', 7860 '2001-09-10', 7861 '2001-11-16' 7862 ) 7863 ) 7864 ) 7865 AND sr_returned_date_sk = d_date_sk 7866 GROUP BY 7867 i_item_id 7868 ), 7869 cr_items 7870 AS ( 7871 SELECT 7872 i_item_id AS item_id, 7873 sum(cr_return_quantity) AS cr_item_qty 7874 FROM 7875 catalog_returns, item, date_dim 7876 WHERE 7877 cr_item_sk = i_item_sk 7878 AND d_date 7879 IN ( 7880 SELECT 7881 d_date 7882 FROM 7883 date_dim 7884 WHERE 7885 d_week_seq 7886 IN ( 7887 SELECT 7888 d_week_seq 7889 FROM 7890 date_dim 7891 WHERE 7892 d_date 7893 IN ( 7894 '2001-07-13', 7895 '2001-09-10', 7896 '2001-11-16' 7897 ) 7898 ) 7899 ) 7900 AND cr_returned_date_sk = d_date_sk 7901 GROUP BY 7902 i_item_id 7903 ), 7904 wr_items 7905 AS ( 7906 SELECT 7907 i_item_id AS item_id, 7908 sum(wr_return_quantity) AS wr_item_qty 7909 FROM 7910 web_returns, item, date_dim 7911 WHERE 7912 wr_item_sk = i_item_sk 7913 AND d_date 7914 IN ( 7915 SELECT 7916 d_date 7917 FROM 7918 date_dim 7919 WHERE 7920 d_week_seq 7921 IN ( 7922 SELECT 7923 d_week_seq 7924 FROM 7925 date_dim 7926 WHERE 7927 d_date 7928 IN ( 7929 '2001-07-13', 7930 '2001-09-10', 7931 '2001-11-16' 7932 ) 7933 ) 7934 ) 7935 AND wr_returned_date_sk = d_date_sk 7936 GROUP BY 7937 i_item_id 7938 ) 7939 SELECT 7940 sr_items.item_id, 7941 sr_item_qty, 7942 sr_item_qty 7943 / (sr_item_qty + cr_item_qty + wr_item_qty) 7944 / 3.0 7945 * 100 7946 AS sr_dev, 7947 cr_item_qty, 7948 cr_item_qty 7949 / (sr_item_qty + cr_item_qty + wr_item_qty) 7950 / 3.0 7951 * 100 7952 AS cr_dev, 7953 wr_item_qty, 7954 wr_item_qty 7955 / (sr_item_qty + cr_item_qty + wr_item_qty) 7956 / 3.0 7957 * 100 7958 AS wr_dev, 7959 (sr_item_qty + cr_item_qty + wr_item_qty) / 3.0 7960 AS average 7961 FROM 7962 sr_items, cr_items, wr_items 7963 WHERE 7964 sr_items.item_id = cr_items.item_id 7965 AND sr_items.item_id = wr_items.item_id 7966 ORDER BY 7967 sr_items.item_id, sr_item_qty 7968 LIMIT 7969 100; 7970 ` 7971 7972 query84 = ` 7973 SELECT 7974 c_customer_id AS customer_id, 7975 COALESCE(c_last_name, '') 7976 || ', ' 7977 || COALESCE(c_first_name, '') 7978 AS customername 7979 FROM 7980 customer, 7981 customer_address, 7982 customer_demographics, 7983 household_demographics, 7984 income_band, 7985 store_returns 7986 WHERE 7987 ca_city = 'Woodland' 7988 AND c_current_addr_sk = ca_address_sk 7989 AND ib_lower_bound >= 60306 7990 AND ib_upper_bound <= 60306 + 50000 7991 AND ib_income_band_sk = hd_income_band_sk 7992 AND cd_demo_sk = c_current_cdemo_sk 7993 AND hd_demo_sk = c_current_hdemo_sk 7994 AND sr_cdemo_sk = cd_demo_sk 7995 ORDER BY 7996 c_customer_id 7997 LIMIT 7998 100; 7999 ` 8000 8001 query85 = ` 8002 SELECT 8003 substr(r_reason_desc, 1, 20), 8004 avg(ws_quantity), 8005 avg(wr_refunded_cash), 8006 avg(wr_fee) 8007 FROM 8008 web_sales, 8009 web_returns, 8010 web_page, 8011 customer_demographics AS cd1, 8012 customer_demographics AS cd2, 8013 customer_address, 8014 date_dim, 8015 reason 8016 WHERE 8017 ws_web_page_sk = wp_web_page_sk 8018 AND ws_item_sk = wr_item_sk 8019 AND ws_order_number = wr_order_number 8020 AND ws_sold_date_sk = d_date_sk 8021 AND d_year = 1998 8022 AND cd1.cd_demo_sk = wr_refunded_cdemo_sk 8023 AND cd2.cd_demo_sk = wr_returning_cdemo_sk 8024 AND ca_address_sk = wr_refunded_addr_sk 8025 AND r_reason_sk = wr_reason_sk 8026 AND ( 8027 ( 8028 cd1.cd_marital_status = 'D' 8029 AND cd1.cd_marital_status 8030 = cd2.cd_marital_status 8031 AND cd1.cd_education_status = 'Primary' 8032 AND cd1.cd_education_status 8033 = cd2.cd_education_status 8034 AND ws_sales_price BETWEEN 100.00 AND 150.00 8035 ) 8036 OR ( 8037 cd1.cd_marital_status = 'S' 8038 AND cd1.cd_marital_status 8039 = cd2.cd_marital_status 8040 AND cd1.cd_education_status = 'College' 8041 AND cd1.cd_education_status 8042 = cd2.cd_education_status 8043 AND ws_sales_price BETWEEN 50.00 AND 100.00 8044 ) 8045 OR ( 8046 cd1.cd_marital_status = 'U' 8047 AND cd1.cd_marital_status 8048 = cd2.cd_marital_status 8049 AND cd1.cd_education_status 8050 = 'Advanced Degree' 8051 AND cd1.cd_education_status 8052 = cd2.cd_education_status 8053 AND ws_sales_price BETWEEN 150.00 AND 200.00 8054 ) 8055 ) 8056 AND ( 8057 ( 8058 ca_country = 'United States' 8059 AND ca_state IN ('NC', 'TX', 'IA') 8060 AND ws_net_profit BETWEEN 100 AND 200 8061 ) 8062 OR ( 8063 ca_country = 'United States' 8064 AND ca_state IN ('WI', 'WV', 'GA') 8065 AND ws_net_profit BETWEEN 150 AND 300 8066 ) 8067 OR ( 8068 ca_country = 'United States' 8069 AND ca_state IN ('OK', 'VA', 'KY') 8070 AND ws_net_profit BETWEEN 50 AND 250 8071 ) 8072 ) 8073 GROUP BY 8074 r_reason_desc 8075 ORDER BY 8076 substr(r_reason_desc, 1, 20), 8077 avg(ws_quantity), 8078 avg(wr_refunded_cash), 8079 avg(wr_fee) 8080 LIMIT 8081 100; 8082 ` 8083 8084 // TODO(yuzefovich): modify it to be parsed by CRDB. 8085 query86 = ` 8086 select 8087 sum(ws_net_paid) as total_sum 8088 ,i_category 8089 ,i_class 8090 ,grouping(i_category)+grouping(i_class) as lochierarchy 8091 ,rank() over ( 8092 partition by grouping(i_category)+grouping(i_class), 8093 case when grouping(i_class) = 0 then i_category end 8094 order by sum(ws_net_paid) desc) as rank_within_parent 8095 from 8096 web_sales 8097 ,date_dim d1 8098 ,item 8099 where 8100 d1.d_month_seq between 1186 and 1186+11 8101 and d1.d_date_sk = ws_sold_date_sk 8102 and i_item_sk = ws_item_sk 8103 group by rollup(i_category,i_class) 8104 order by 8105 lochierarchy desc, 8106 case when lochierarchy = 0 then i_category end, 8107 rank_within_parent 8108 limit 100; 8109 ` 8110 8111 query87 = ` 8112 SELECT 8113 count(*) 8114 FROM 8115 ( 8116 ( 8117 SELECT 8118 DISTINCT c_last_name, c_first_name, d_date 8119 FROM 8120 store_sales, date_dim, customer 8121 WHERE 8122 store_sales.ss_sold_date_sk 8123 = date_dim.d_date_sk 8124 AND store_sales.ss_customer_sk 8125 = customer.c_customer_sk 8126 AND d_month_seq BETWEEN 1202 AND (1202 + 11) 8127 ) 8128 EXCEPT 8129 ( 8130 SELECT 8131 DISTINCT 8132 c_last_name, 8133 c_first_name, 8134 d_date 8135 FROM 8136 catalog_sales, date_dim, customer 8137 WHERE 8138 catalog_sales.cs_sold_date_sk 8139 = date_dim.d_date_sk 8140 AND catalog_sales.cs_bill_customer_sk 8141 = customer.c_customer_sk 8142 AND d_month_seq BETWEEN 1202 AND (1202 + 11) 8143 ) 8144 EXCEPT 8145 ( 8146 SELECT 8147 DISTINCT 8148 c_last_name, 8149 c_first_name, 8150 d_date 8151 FROM 8152 web_sales, date_dim, customer 8153 WHERE 8154 web_sales.ws_sold_date_sk 8155 = date_dim.d_date_sk 8156 AND web_sales.ws_bill_customer_sk 8157 = customer.c_customer_sk 8158 AND d_month_seq BETWEEN 1202 AND (1202 + 11) 8159 ) 8160 ) 8161 AS cool_cust; 8162 ` 8163 8164 query88 = ` 8165 SELECT 8166 * 8167 FROM 8168 ( 8169 SELECT 8170 count(*) AS h8_30_to_9 8171 FROM 8172 store_sales, 8173 household_demographics, 8174 time_dim, 8175 store 8176 WHERE 8177 ss_sold_time_sk = time_dim.t_time_sk 8178 AND ss_hdemo_sk 8179 = household_demographics.hd_demo_sk 8180 AND ss_store_sk = s_store_sk 8181 AND time_dim.t_hour = 8 8182 AND time_dim.t_minute >= 30 8183 AND ( 8184 ( 8185 household_demographics.hd_dep_count 8186 = 0 8187 AND household_demographics.hd_vehicle_count 8188 <= 0 + 2 8189 ) 8190 OR ( 8191 household_demographics.hd_dep_count 8192 = -1 8193 AND household_demographics.hd_vehicle_count 8194 <= -1 + 2 8195 ) 8196 OR ( 8197 household_demographics.hd_dep_count 8198 = 3 8199 AND household_demographics.hd_vehicle_count 8200 <= 3 + 2 8201 ) 8202 ) 8203 AND store.s_store_name = 'ese' 8204 ) 8205 AS s1, 8206 ( 8207 SELECT 8208 count(*) AS h9_to_9_30 8209 FROM 8210 store_sales, 8211 household_demographics, 8212 time_dim, 8213 store 8214 WHERE 8215 ss_sold_time_sk = time_dim.t_time_sk 8216 AND ss_hdemo_sk 8217 = household_demographics.hd_demo_sk 8218 AND ss_store_sk = s_store_sk 8219 AND time_dim.t_hour = 9 8220 AND time_dim.t_minute < 30 8221 AND ( 8222 ( 8223 household_demographics.hd_dep_count 8224 = 0 8225 AND household_demographics.hd_vehicle_count 8226 <= 0 + 2 8227 ) 8228 OR ( 8229 household_demographics.hd_dep_count 8230 = -1 8231 AND household_demographics.hd_vehicle_count 8232 <= -1 + 2 8233 ) 8234 OR ( 8235 household_demographics.hd_dep_count 8236 = 3 8237 AND household_demographics.hd_vehicle_count 8238 <= 3 + 2 8239 ) 8240 ) 8241 AND store.s_store_name = 'ese' 8242 ) 8243 AS s2, 8244 ( 8245 SELECT 8246 count(*) AS h9_30_to_10 8247 FROM 8248 store_sales, 8249 household_demographics, 8250 time_dim, 8251 store 8252 WHERE 8253 ss_sold_time_sk = time_dim.t_time_sk 8254 AND ss_hdemo_sk 8255 = household_demographics.hd_demo_sk 8256 AND ss_store_sk = s_store_sk 8257 AND time_dim.t_hour = 9 8258 AND time_dim.t_minute >= 30 8259 AND ( 8260 ( 8261 household_demographics.hd_dep_count 8262 = 0 8263 AND household_demographics.hd_vehicle_count 8264 <= 0 + 2 8265 ) 8266 OR ( 8267 household_demographics.hd_dep_count 8268 = -1 8269 AND household_demographics.hd_vehicle_count 8270 <= -1 + 2 8271 ) 8272 OR ( 8273 household_demographics.hd_dep_count 8274 = 3 8275 AND household_demographics.hd_vehicle_count 8276 <= 3 + 2 8277 ) 8278 ) 8279 AND store.s_store_name = 'ese' 8280 ) 8281 AS s3, 8282 ( 8283 SELECT 8284 count(*) AS h10_to_10_30 8285 FROM 8286 store_sales, 8287 household_demographics, 8288 time_dim, 8289 store 8290 WHERE 8291 ss_sold_time_sk = time_dim.t_time_sk 8292 AND ss_hdemo_sk 8293 = household_demographics.hd_demo_sk 8294 AND ss_store_sk = s_store_sk 8295 AND time_dim.t_hour = 10 8296 AND time_dim.t_minute < 30 8297 AND ( 8298 ( 8299 household_demographics.hd_dep_count 8300 = 0 8301 AND household_demographics.hd_vehicle_count 8302 <= 0 + 2 8303 ) 8304 OR ( 8305 household_demographics.hd_dep_count 8306 = -1 8307 AND household_demographics.hd_vehicle_count 8308 <= -1 + 2 8309 ) 8310 OR ( 8311 household_demographics.hd_dep_count 8312 = 3 8313 AND household_demographics.hd_vehicle_count 8314 <= 3 + 2 8315 ) 8316 ) 8317 AND store.s_store_name = 'ese' 8318 ) 8319 AS s4, 8320 ( 8321 SELECT 8322 count(*) AS h10_30_to_11 8323 FROM 8324 store_sales, 8325 household_demographics, 8326 time_dim, 8327 store 8328 WHERE 8329 ss_sold_time_sk = time_dim.t_time_sk 8330 AND ss_hdemo_sk 8331 = household_demographics.hd_demo_sk 8332 AND ss_store_sk = s_store_sk 8333 AND time_dim.t_hour = 10 8334 AND time_dim.t_minute >= 30 8335 AND ( 8336 ( 8337 household_demographics.hd_dep_count 8338 = 0 8339 AND household_demographics.hd_vehicle_count 8340 <= 0 + 2 8341 ) 8342 OR ( 8343 household_demographics.hd_dep_count 8344 = -1 8345 AND household_demographics.hd_vehicle_count 8346 <= -1 + 2 8347 ) 8348 OR ( 8349 household_demographics.hd_dep_count 8350 = 3 8351 AND household_demographics.hd_vehicle_count 8352 <= 3 + 2 8353 ) 8354 ) 8355 AND store.s_store_name = 'ese' 8356 ) 8357 AS s5, 8358 ( 8359 SELECT 8360 count(*) AS h11_to_11_30 8361 FROM 8362 store_sales, 8363 household_demographics, 8364 time_dim, 8365 store 8366 WHERE 8367 ss_sold_time_sk = time_dim.t_time_sk 8368 AND ss_hdemo_sk 8369 = household_demographics.hd_demo_sk 8370 AND ss_store_sk = s_store_sk 8371 AND time_dim.t_hour = 11 8372 AND time_dim.t_minute < 30 8373 AND ( 8374 ( 8375 household_demographics.hd_dep_count 8376 = 0 8377 AND household_demographics.hd_vehicle_count 8378 <= 0 + 2 8379 ) 8380 OR ( 8381 household_demographics.hd_dep_count 8382 = -1 8383 AND household_demographics.hd_vehicle_count 8384 <= -1 + 2 8385 ) 8386 OR ( 8387 household_demographics.hd_dep_count 8388 = 3 8389 AND household_demographics.hd_vehicle_count 8390 <= 3 + 2 8391 ) 8392 ) 8393 AND store.s_store_name = 'ese' 8394 ) 8395 AS s6, 8396 ( 8397 SELECT 8398 count(*) AS h11_30_to_12 8399 FROM 8400 store_sales, 8401 household_demographics, 8402 time_dim, 8403 store 8404 WHERE 8405 ss_sold_time_sk = time_dim.t_time_sk 8406 AND ss_hdemo_sk 8407 = household_demographics.hd_demo_sk 8408 AND ss_store_sk = s_store_sk 8409 AND time_dim.t_hour = 11 8410 AND time_dim.t_minute >= 30 8411 AND ( 8412 ( 8413 household_demographics.hd_dep_count 8414 = 0 8415 AND household_demographics.hd_vehicle_count 8416 <= 0 + 2 8417 ) 8418 OR ( 8419 household_demographics.hd_dep_count 8420 = -1 8421 AND household_demographics.hd_vehicle_count 8422 <= -1 + 2 8423 ) 8424 OR ( 8425 household_demographics.hd_dep_count 8426 = 3 8427 AND household_demographics.hd_vehicle_count 8428 <= 3 + 2 8429 ) 8430 ) 8431 AND store.s_store_name = 'ese' 8432 ) 8433 AS s7, 8434 ( 8435 SELECT 8436 count(*) AS h12_to_12_30 8437 FROM 8438 store_sales, 8439 household_demographics, 8440 time_dim, 8441 store 8442 WHERE 8443 ss_sold_time_sk = time_dim.t_time_sk 8444 AND ss_hdemo_sk 8445 = household_demographics.hd_demo_sk 8446 AND ss_store_sk = s_store_sk 8447 AND time_dim.t_hour = 12 8448 AND time_dim.t_minute < 30 8449 AND ( 8450 ( 8451 household_demographics.hd_dep_count 8452 = 0 8453 AND household_demographics.hd_vehicle_count 8454 <= 0 + 2 8455 ) 8456 OR ( 8457 household_demographics.hd_dep_count 8458 = -1 8459 AND household_demographics.hd_vehicle_count 8460 <= -1 + 2 8461 ) 8462 OR ( 8463 household_demographics.hd_dep_count 8464 = 3 8465 AND household_demographics.hd_vehicle_count 8466 <= 3 + 2 8467 ) 8468 ) 8469 AND store.s_store_name = 'ese' 8470 ) 8471 AS s8; 8472 ` 8473 8474 query89 = ` 8475 SELECT 8476 * 8477 FROM 8478 ( 8479 SELECT 8480 i_category, 8481 i_class, 8482 i_brand, 8483 s_store_name, 8484 s_company_name, 8485 d_moy, 8486 sum(ss_sales_price) AS sum_sales, 8487 avg(sum(ss_sales_price)) OVER ( 8488 PARTITION BY 8489 i_category, 8490 i_brand, 8491 s_store_name, 8492 s_company_name 8493 ) 8494 AS avg_monthly_sales 8495 FROM 8496 item, store_sales, date_dim, store 8497 WHERE 8498 ss_item_sk = i_item_sk 8499 AND ss_sold_date_sk = d_date_sk 8500 AND ss_store_sk = s_store_sk 8501 AND d_year IN (2001,) 8502 AND ( 8503 ( 8504 i_category 8505 IN ( 8506 'Books', 8507 'Children', 8508 'Electronics' 8509 ) 8510 AND i_class 8511 IN ( 8512 'history', 8513 'school-uniforms', 8514 'audio' 8515 ) 8516 ) 8517 OR ( 8518 i_category 8519 IN ('Men', 'Sports', 'Shoes') 8520 AND i_class 8521 IN ( 8522 'pants', 8523 'tennis', 8524 'womens' 8525 ) 8526 ) 8527 ) 8528 GROUP BY 8529 i_category, 8530 i_class, 8531 i_brand, 8532 s_store_name, 8533 s_company_name, 8534 d_moy 8535 ) 8536 AS tmp1 8537 WHERE 8538 CASE 8539 WHEN (avg_monthly_sales != 0) 8540 THEN ( 8541 abs(sum_sales - avg_monthly_sales) 8542 / avg_monthly_sales 8543 ) 8544 ELSE NULL 8545 END 8546 > 0.1 8547 ORDER BY 8548 sum_sales - avg_monthly_sales, s_store_name 8549 LIMIT 8550 100; 8551 ` 8552 8553 query90 = ` 8554 SELECT 8555 CAST(amc AS DECIMAL(15,4)) / CAST(pmc AS DECIMAL(15,4)) 8556 AS am_pm_ratio 8557 FROM 8558 ( 8559 SELECT 8560 count(*) AS amc 8561 FROM 8562 web_sales, 8563 household_demographics, 8564 time_dim, 8565 web_page 8566 WHERE 8567 ws_sold_time_sk = time_dim.t_time_sk 8568 AND ws_ship_hdemo_sk 8569 = household_demographics.hd_demo_sk 8570 AND ws_web_page_sk = web_page.wp_web_page_sk 8571 AND time_dim.t_hour BETWEEN 12 AND (12 + 1) 8572 AND household_demographics.hd_dep_count = 6 8573 AND web_page.wp_char_count BETWEEN 5000 AND 5200 8574 ) 8575 AS at, 8576 ( 8577 SELECT 8578 count(*) AS pmc 8579 FROM 8580 web_sales, 8581 household_demographics, 8582 time_dim, 8583 web_page 8584 WHERE 8585 ws_sold_time_sk = time_dim.t_time_sk 8586 AND ws_ship_hdemo_sk 8587 = household_demographics.hd_demo_sk 8588 AND ws_web_page_sk = web_page.wp_web_page_sk 8589 AND time_dim.t_hour BETWEEN 14 AND (14 + 1) 8590 AND household_demographics.hd_dep_count = 6 8591 AND web_page.wp_char_count BETWEEN 5000 AND 5200 8592 ) 8593 AS pt 8594 ORDER BY 8595 am_pm_ratio 8596 LIMIT 8597 100; 8598 ` 8599 8600 query91 = ` 8601 SELECT 8602 cc_call_center_id AS call_center, 8603 cc_name AS call_center_name, 8604 cc_manager AS manager, 8605 sum(cr_net_loss) AS returns_loss 8606 FROM 8607 call_center, 8608 catalog_returns, 8609 date_dim, 8610 customer, 8611 customer_address, 8612 customer_demographics, 8613 household_demographics 8614 WHERE 8615 cr_call_center_sk = cc_call_center_sk 8616 AND cr_returned_date_sk = d_date_sk 8617 AND cr_returning_customer_sk = c_customer_sk 8618 AND cd_demo_sk = c_current_cdemo_sk 8619 AND hd_demo_sk = c_current_hdemo_sk 8620 AND ca_address_sk = c_current_addr_sk 8621 AND d_year = 2000 8622 AND d_moy = 12 8623 AND ( 8624 ( 8625 cd_marital_status = 'M' 8626 AND cd_education_status = 'Unknown' 8627 ) 8628 OR ( 8629 cd_marital_status = 'W' 8630 AND cd_education_status 8631 = 'Advanced Degree' 8632 ) 8633 ) 8634 AND hd_buy_potential LIKE 'Unknown%' 8635 AND ca_gmt_offset = -7 8636 GROUP BY 8637 cc_call_center_id, 8638 cc_name, 8639 cc_manager, 8640 cd_marital_status, 8641 cd_education_status 8642 ORDER BY 8643 sum(cr_net_loss) DESC; 8644 ` 8645 8646 // NOTE: I added conversion of 90 days to an interval. 8647 query92 = ` 8648 SELECT 8649 sum(ws_ext_discount_amt) AS "Excess Discount Amount" 8650 FROM 8651 web_sales, item, date_dim 8652 WHERE 8653 i_manufact_id = 714 8654 AND i_item_sk = ws_item_sk 8655 AND d_date BETWEEN '2000-02-01' AND (CAST('2000-02-01' AS DATE) + '90 days'::INTERVAL) 8656 AND d_date_sk = ws_sold_date_sk 8657 AND ws_ext_discount_amt 8658 > ( 8659 SELECT 8660 1.3 * avg(ws_ext_discount_amt) 8661 FROM 8662 web_sales, date_dim 8663 WHERE 8664 ws_item_sk = i_item_sk 8665 AND d_date BETWEEN '2000-02-01' AND (CAST('2000-02-01' AS DATE) + '90 days'::INTERVAL) 8666 AND d_date_sk = ws_sold_date_sk 8667 ) 8668 ORDER BY 8669 sum(ws_ext_discount_amt) 8670 LIMIT 8671 100; 8672 ` 8673 8674 query93 = ` 8675 SELECT 8676 ss_customer_sk, sum(act_sales) AS sumsales 8677 FROM 8678 ( 8679 SELECT 8680 ss_item_sk, 8681 ss_ticket_number, 8682 ss_customer_sk, 8683 CASE 8684 WHEN sr_return_quantity IS NOT NULL 8685 THEN (ss_quantity - sr_return_quantity) 8686 * ss_sales_price 8687 ELSE (ss_quantity * ss_sales_price) 8688 END 8689 AS act_sales 8690 FROM 8691 store_sales 8692 LEFT JOIN store_returns ON 8693 sr_item_sk = ss_item_sk 8694 AND sr_ticket_number = ss_ticket_number, 8695 reason 8696 WHERE 8697 sr_reason_sk = r_reason_sk 8698 AND r_reason_desc = 'reason 58' 8699 ) 8700 AS t 8701 GROUP BY 8702 ss_customer_sk 8703 ORDER BY 8704 sumsales, ss_customer_sk 8705 LIMIT 8706 100; 8707 ` 8708 8709 // NOTE: I added conversion of 60 days to an interval. 8710 query94 = ` 8711 SELECT 8712 count(DISTINCT ws_order_number) AS "order count", 8713 sum(ws_ext_ship_cost) AS "total shipping cost", 8714 sum(ws_net_profit) AS "total net profit" 8715 FROM 8716 web_sales AS ws1, date_dim, customer_address, web_site 8717 WHERE 8718 d_date BETWEEN '2002-5-01' AND (CAST('2002-5-01' AS DATE) + '60 days'::INTERVAL) 8719 AND ws1.ws_ship_date_sk = d_date_sk 8720 AND ws1.ws_ship_addr_sk = ca_address_sk 8721 AND ca_state = 'OK' 8722 AND ws1.ws_web_site_sk = web_site_sk 8723 AND web_company_name = 'pri' 8724 AND EXISTS( 8725 SELECT 8726 * 8727 FROM 8728 web_sales AS ws2 8729 WHERE 8730 ws1.ws_order_number = ws2.ws_order_number 8731 AND ws1.ws_warehouse_sk 8732 != ws2.ws_warehouse_sk 8733 ) 8734 AND NOT 8735 EXISTS( 8736 SELECT 8737 * 8738 FROM 8739 web_returns AS wr1 8740 WHERE 8741 ws1.ws_order_number 8742 = wr1.wr_order_number 8743 ) 8744 ORDER BY 8745 count(DISTINCT ws_order_number) 8746 LIMIT 8747 100; 8748 ` 8749 8750 // NOTE: I added conversion of 60 days to an interval. 8751 query95 = ` 8752 WITH 8753 ws_wh 8754 AS ( 8755 SELECT 8756 ws1.ws_order_number, 8757 ws1.ws_warehouse_sk AS wh1, 8758 ws2.ws_warehouse_sk AS wh2 8759 FROM 8760 web_sales AS ws1, web_sales AS ws2 8761 WHERE 8762 ws1.ws_order_number = ws2.ws_order_number 8763 AND ws1.ws_warehouse_sk 8764 != ws2.ws_warehouse_sk 8765 ) 8766 SELECT 8767 count(DISTINCT ws_order_number) AS "order count", 8768 sum(ws_ext_ship_cost) AS "total shipping cost", 8769 sum(ws_net_profit) AS "total net profit" 8770 FROM 8771 web_sales AS ws1, date_dim, customer_address, web_site 8772 WHERE 8773 d_date BETWEEN '2001-4-01' AND (CAST('2001-4-01' AS DATE) + '60 days'::INTERVAL) 8774 AND ws1.ws_ship_date_sk = d_date_sk 8775 AND ws1.ws_ship_addr_sk = ca_address_sk 8776 AND ca_state = 'VA' 8777 AND ws1.ws_web_site_sk = web_site_sk 8778 AND web_company_name = 'pri' 8779 AND ws1.ws_order_number 8780 IN (SELECT ws_order_number FROM ws_wh) 8781 AND ws1.ws_order_number 8782 IN ( 8783 SELECT 8784 wr_order_number 8785 FROM 8786 web_returns, ws_wh 8787 WHERE 8788 wr_order_number = ws_wh.ws_order_number 8789 ) 8790 ORDER BY 8791 count(DISTINCT ws_order_number) 8792 LIMIT 8793 100; 8794 ` 8795 8796 query96 = ` 8797 SELECT 8798 count(*) 8799 FROM 8800 store_sales, household_demographics, time_dim, store 8801 WHERE 8802 ss_sold_time_sk = time_dim.t_time_sk 8803 AND ss_hdemo_sk = household_demographics.hd_demo_sk 8804 AND ss_store_sk = s_store_sk 8805 AND time_dim.t_hour = 8 8806 AND time_dim.t_minute >= 30 8807 AND household_demographics.hd_dep_count = 0 8808 AND store.s_store_name = 'ese' 8809 ORDER BY 8810 count(*) 8811 LIMIT 8812 100; 8813 ` 8814 8815 query97 = ` 8816 WITH 8817 ssci 8818 AS ( 8819 SELECT 8820 ss_customer_sk AS customer_sk, 8821 ss_item_sk AS item_sk 8822 FROM 8823 store_sales, date_dim 8824 WHERE 8825 ss_sold_date_sk = d_date_sk 8826 AND d_month_seq BETWEEN 1199 AND (1199 + 11) 8827 GROUP BY 8828 ss_customer_sk, ss_item_sk 8829 ), 8830 csci 8831 AS ( 8832 SELECT 8833 cs_bill_customer_sk AS customer_sk, 8834 cs_item_sk AS item_sk 8835 FROM 8836 catalog_sales, date_dim 8837 WHERE 8838 cs_sold_date_sk = d_date_sk 8839 AND d_month_seq BETWEEN 1199 AND (1199 + 11) 8840 GROUP BY 8841 cs_bill_customer_sk, cs_item_sk 8842 ) 8843 SELECT 8844 sum( 8845 CASE 8846 WHEN ssci.customer_sk IS NOT NULL 8847 AND csci.customer_sk IS NULL 8848 THEN 1 8849 ELSE 0 8850 END 8851 ) 8852 AS store_only, 8853 sum( 8854 CASE 8855 WHEN ssci.customer_sk IS NULL 8856 AND csci.customer_sk IS NOT NULL 8857 THEN 1 8858 ELSE 0 8859 END 8860 ) 8861 AS catalog_only, 8862 sum( 8863 CASE 8864 WHEN ssci.customer_sk IS NOT NULL 8865 AND csci.customer_sk IS NOT NULL 8866 THEN 1 8867 ELSE 0 8868 END 8869 ) 8870 AS store_and_catalog 8871 FROM 8872 ssci 8873 FULL JOIN csci ON 8874 ssci.customer_sk = csci.customer_sk 8875 AND ssci.item_sk = csci.item_sk 8876 LIMIT 8877 100; 8878 ` 8879 8880 // NOTE: I added conversion of 30 days to an interval. 8881 query98 = ` 8882 SELECT 8883 i_item_id, 8884 i_item_desc, 8885 i_category, 8886 i_class, 8887 i_current_price, 8888 sum(ss_ext_sales_price) AS itemrevenue, 8889 sum(ss_ext_sales_price) * 100 8890 / sum(sum(ss_ext_sales_price)) OVER ( 8891 PARTITION BY i_class 8892 ) 8893 AS revenueratio 8894 FROM 8895 store_sales, item, date_dim 8896 WHERE 8897 ss_item_sk = i_item_sk 8898 AND i_category IN ('Men', 'Sports', 'Jewelry') 8899 AND ss_sold_date_sk = d_date_sk 8900 AND d_date BETWEEN CAST('1999-02-05' AS DATE) AND (CAST('1999-02-05' AS DATE) + '30 days'::INTERVAL) 8901 GROUP BY 8902 i_item_id, 8903 i_item_desc, 8904 i_category, 8905 i_class, 8906 i_current_price 8907 ORDER BY 8908 i_category, 8909 i_class, 8910 i_item_id, 8911 i_item_desc, 8912 revenueratio; 8913 ` 8914 8915 query99 = ` 8916 SELECT 8917 substr(w_warehouse_name, 1, 20), 8918 sm_type, 8919 cc_name, 8920 sum( 8921 CASE 8922 WHEN (cs_ship_date_sk - cs_sold_date_sk <= 30) 8923 THEN 1 8924 ELSE 0 8925 END 8926 ) 8927 AS "30 days", 8928 sum( 8929 CASE 8930 WHEN cs_ship_date_sk - cs_sold_date_sk > 30 8931 AND cs_ship_date_sk - cs_sold_date_sk <= 60 8932 THEN 1 8933 ELSE 0 8934 END 8935 ) 8936 AS "31-60 days", 8937 sum( 8938 CASE 8939 WHEN cs_ship_date_sk - cs_sold_date_sk > 60 8940 AND cs_ship_date_sk - cs_sold_date_sk <= 90 8941 THEN 1 8942 ELSE 0 8943 END 8944 ) 8945 AS "61-90 days", 8946 sum( 8947 CASE 8948 WHEN cs_ship_date_sk - cs_sold_date_sk > 90 8949 AND cs_ship_date_sk - cs_sold_date_sk <= 120 8950 THEN 1 8951 ELSE 0 8952 END 8953 ) 8954 AS "91-120 days", 8955 sum( 8956 CASE 8957 WHEN (cs_ship_date_sk - cs_sold_date_sk > 120) 8958 THEN 1 8959 ELSE 0 8960 END 8961 ) 8962 AS ">120 days" 8963 FROM 8964 catalog_sales, 8965 warehouse, 8966 ship_mode, 8967 call_center, 8968 date_dim 8969 WHERE 8970 d_month_seq BETWEEN 1194 AND (1194 + 11) 8971 AND cs_ship_date_sk = d_date_sk 8972 AND cs_warehouse_sk = w_warehouse_sk 8973 AND cs_ship_mode_sk = sm_ship_mode_sk 8974 AND cs_call_center_sk = cc_call_center_sk 8975 GROUP BY 8976 substr(w_warehouse_name, 1, 20), sm_type, cc_name 8977 ORDER BY 8978 substr(w_warehouse_name, 1, 20), sm_type, cc_name 8979 LIMIT 8980 100; 8981 ` 8982 )