Advertisement
Guest User

Untitled

a guest
Apr 14th, 2014
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. WITH _discounts AS (
  2. SELECT
  3. d. ID,
  4. d. NAME,
  5. d.amount,
  6. d.percentage,
  7. d.minimum_order_price,
  8. ARRAY_AGG (DISTINCT tag.producttag_id) tags,
  9. ARRAY_AGG (DISTINCT cat.category_id) cats,
  10. ARRAY_AGG (
  11. DISTINCT customer.customergroup_id
  12. ) customers
  13. FROM
  14. discount d
  15. LEFT JOIN discount_category cat ON (d. ID = cat.category_id)
  16. LEFT JOIN discount_product_tag tag ON (d. ID = tag.discount_id)
  17. LEFT JOIN discount_customer_group customer ON (customer.discount_id = d. ID)
  18. WHERE
  19. d.is_active = TRUE
  20. AND CURRENT_DATE BETWEEN start_date
  21. AND end_date
  22. GROUP BY
  23. d. ID
  24. ),
  25. dataset AS (
  26. SELECT
  27. product. ID,
  28. manufacturer_id,
  29. category_id,
  30. product.grup_id,
  31. round(
  32. COALESCE (
  33. (
  34. SELECT
  35. (
  36. CASE
  37. WHEN d.percentage IS NOT NULL THEN
  38. (100 - d.percentage) / 100.0 * COALESCE (
  39. product.discount_price,
  40. product.price
  41. )
  42. ELSE
  43. COALESCE (
  44. product.discount_price,
  45. product.price
  46. ) - d.amount
  47. END
  48. )
  49. FROM
  50. _discounts d
  51. WHERE
  52. (
  53. d.cats = '{NULL}' :: INT []
  54. OR product.category_id = ANY (d.cats)
  55. )
  56. AND (
  57. d.customers = '{NULL}' :: INT []
  58. OR 1 = ANY (d.customers)
  59. )
  60. AND (
  61. d.tags = '{NULL}' :: INT []
  62. OR d.tags && ARRAY (
  63. SELECT
  64. producttag_id
  65. FROM
  66. product_tags
  67. WHERE
  68. product_id = product. ID
  69. )
  70. )
  71. ORDER BY
  72. COALESCE (
  73. d.percentage * product.price,
  74. d.amount
  75. ) DESC
  76. LIMIT 1
  77. ),
  78. product.discount_price,
  79. product.price
  80. ),
  81. 2
  82. ) price
  83. FROM
  84. product
  85. WHERE
  86. product.active = TRUE
  87. ) SELECT
  88. COUNT (product. ID),
  89. NULL AS ID,
  90. NULL AS NAME,
  91. NULL AS slug,
  92. 0 AS FILTER
  93. FROM
  94. dataset product
  95. UNION ALL
  96. (
  97. SELECT
  98. COUNT (dataset. ID),
  99. M . ID AS ID,
  100. M . NAME,
  101. NULL AS slug,
  102. 1 AS FILTER
  103. FROM
  104. dataset
  105. JOIN manufacturer M ON (M . ID = dataset.manufacturer_id)
  106. GROUP BY
  107. M . ID
  108. ORDER BY
  109. M . NAME
  110. )
  111. UNION ALL
  112. (
  113. SELECT
  114. COUNT (dataset. ID),
  115. T . ID AS ID,
  116. T . NAME AS NAME,
  117. T .slug AS slug,
  118. 4 AS FILTER
  119. FROM
  120. dataset
  121. JOIN product_tags rel ON (rel.product_id = dataset. ID)
  122. JOIN product_tag T ON (T . ID = rel.producttag_id)
  123. GROUP BY
  124. T . ID
  125. ORDER BY
  126. T . NAME
  127. )
  128. UNION ALL
  129. (
  130. SELECT
  131. COUNT (dataset. ID),
  132. C . ID AS ID,
  133. C . NAME,
  134. C .slug,
  135. 2 AS FILTER
  136. FROM
  137. category C
  138. JOIN category AS node ON (
  139. C .tree_id = node.tree_id
  140. AND node.lft > C .lft - 1
  141. AND node.rght < C .rght + 1
  142. )
  143. JOIN dataset ON (dataset.category_id = node. ID)
  144. WHERE
  145. C .parent_id IS NULL
  146. GROUP BY
  147. C . ID
  148. )
  149. UNION ALL
  150. (
  151. SELECT
  152. COUNT (DISTINCT dataset. ID),
  153. brand. ID,
  154. brand. NAME,
  155. brand.slug,
  156. 3 AS FILTER
  157. FROM
  158. dataset
  159. JOIN vehicle_grup_id rel ON (rel.grup_id = dataset.grup_id)
  160. JOIN vehicle v ON (rel.vehicle_id = v. ID)
  161. JOIN vehicle_tree model_type ON (
  162. model_type. ID = v.vehicle_model_type_id
  163. )
  164. JOIN vehicle_tree model ON (model. ID = model_type.parent_id)
  165. JOIN vehicle_tree brand ON (brand. ID = model.parent_id)
  166. GROUP BY
  167. brand. ID
  168. ORDER BY
  169. brand. NAME
  170. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement