Advertisement
congky

Tugas Sql

Jul 24th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- 3. Tampilkan sale_hp untuk semua tahun, tp hanya yang top year di tahun bersangkutan
  2. -- EXISTS
  3. SELECT A.*, B.hp_name FROM sale_hp A
  4. INNER JOIN product_hp B ON A.hp_id = B.hp_id
  5. WHERE EXISTS (
  6.  
  7.         SELECT 1 FROM top_hp_of_the_year Z
  8.         WHERE A.year = Z.year
  9.         AND A.hp_id = Z.hp_id
  10.  
  11. );
  12.  
  13. -- IN
  14. SELECT A.*, B.hp_name FROM sale_hp A
  15. INNER JOIN product_hp B ON A.hp_id = B.hp_id
  16. WHERE year IN ( SELECT year FROM top_hp_of_the_year Z WHERE A.hp_id = Z.hp_id );
  17.  
  18. -- 4. Tampilkan sale hp perbrand brand yang tidak semua typenya terjual di tahun bersangkutan
  19. -- mapping brand terjual di tahun apa aja
  20. WITH year_brand AS (
  21.     SELECT A.year, C.brand_id, C.brand_name
  22.     FROM sale_hp A
  23.     INNER JOIN product_hp B ON A.hp_id = B.hp_id
  24.     INNER JOIN brand_hp C ON B.hp_brand_id = C.brand_id
  25.     GROUP BY A.year, C.brand_id, C.brand_name
  26. )
  27.  
  28. -- mapping, dari brand tersebut ada produk apa saja
  29. -- dan ambil hanya yang pernah tidak terjual saja
  30. SELECT B.year, B.brand_name FROM product_hp A
  31. INNER JOIN year_brand B ON A.hp_brand_id = B.brand_id
  32. WHERE
  33. NOT EXISTS (
  34.     SELECT 1 FROM sale_hp Z
  35.     WHERE A.hp_id = Z.hp_id
  36.     AND Z.year = B.year
  37. )
  38. ORDER BY B.year;
  39.  
  40. -- Without WITH
  41. SELECT A.year, C.brand_name
  42. FROM sale_hp A
  43. INNER JOIN product_hp B ON A.hp_id = B.hp_id
  44. INNER JOIN brand_hp C ON B.hp_brand_id = C.brand_id
  45. INNER JOIN product_hp D ON C.brand_id = D.hp_brand_id
  46. WHERE NOT EXISTS(
  47.     SELECT 1 FROM sale_hp Z
  48.     WHERE D.hp_id = Z.hp_id
  49.     AND A.year = Z.year
  50. )
  51. GROUP BY A.year, C.brand_id
  52. ORDER BY A.year;
  53.  
  54. -- 5. Tampilkan sale hp perbrand yg total penjualannya meningkat dari tahun sebelumnya
  55. -- Have no idea without WITH, asumsi nya data penjualan akan terus bertambah dari tahun ke tahun, dan di suruh menampilkan data dengan penjualan meningkat dari tahun sebelum nya, tanpa ada inputan / pantekan tahun.
  56.  
  57. -- Data penjualan untuk semua brand, dan semua tahun
  58. WITH data_penjualan AS (
  59.     SELECT A.year, C.brand_id, C.brand_name, SUM(A.qty) total_penjualan
  60.     FROM sale_hp A
  61.     INNER JOIN product_hp B ON A.hp_id = B.hp_id
  62.     INNER JOIN brand_hp C ON B.hp_brand_id = C.brand_id
  63.     GROUP BY A.year, C.brand_id, C.brand_name
  64. ),
  65.  
  66. -- ambil data penjualan naik
  67. data_penjualan_naik AS (
  68.     SELECT A.year, A.brand_id, A.brand_name, A.total_penjualan FROM data_penjualan A
  69.     WHERE EXISTS (
  70.         SELECT 1 FROM data_penjualan Z
  71.         WHERE A.year::bigint = Z.year::bigint +1
  72.         AND A.brand_id = Z.brand_id
  73.         AND A.total_penjualan > Z.total_penjualan
  74.     )
  75. )
  76.  
  77. -- ambil data penjualan naik dengan data penjualan sebelum nya, dan cari selisihnya
  78. SELECT A.year, A.brand_name, A.total_penjualan, B.total_penjualan AS total_penjualan_thn_sebelumnya,
  79. A.total_penjualan - B.total_penjualan AS selisih_penjualan
  80. FROM data_penjualan_naik A
  81. INNER JOIN data_penjualan B ON A.brand_id = B.brand_id AND A.year::bigint - 1 = B.year::bigint ;
  82.  
  83. -- 6. Tampilkan sale hp per brand yg jumlah penjualan lebih tinggi dari rata2 tiap tahunnya
  84. -- Data penjualan untuk semua brand, dan semua tahun
  85. WITH data_penjualan AS (
  86.     SELECT A.year, C.brand_id, C.brand_name, SUM(A.qty) total_penjualan
  87.     FROM sale_hp A
  88.     INNER JOIN product_hp B ON A.hp_id = B.hp_id
  89.     INNER JOIN brand_hp C ON B.hp_brand_id = C.brand_id
  90.     GROUP BY A.year, C.brand_id, C.brand_name
  91. ),
  92. -- Rata rata per tahun
  93. data_avg_penjualan AS (
  94. SELECT A.year, AVG(A.total_penjualan) avg_penjualan FROM data_penjualan A
  95. GROUP BY A.year
  96. )
  97. -- Ambil data penjualan yang penjualan nya lebih tinggi dari rata - rata per tahun nya
  98. SELECT A.year, A.brand_name, A.total_penjualan, B.avg_penjualan AS rata_rata_penjualan_tiap_tahun FROM data_penjualan A
  99. INNER JOIN data_avg_penjualan B ON A.year = B.year
  100. WHERE A.total_penjualan > B.avg_penjualan
  101. ORDER BY A.year;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement