daily pastebin goal
62%
SHARE
TWEET

Untitled

a guest Apr 14th, 2014 16 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.         )
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top