groups.sql 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. SET title = 'Groups';
  2. SET products = COALESCE($products, sqlpage.cookie('products'));
  3. DROP TABLE IF EXISTS sqlpage_groups;
  4. CREATE TEMPORARY TABLE IF NOT EXISTS sqlpage_groups AS (
  5. SELECT
  6. count(DISTINCT p.id) AS "Products",
  7. count(DISTINCT c.id) AS "Categories",
  8. count(DISTINCT g.id) AS "Groups",
  9. p.name AS product,
  10. c.name AS category,
  11. g.name AS "group"
  12. FROM products p
  13. JOIN categories c ON p.category_id = c.id
  14. JOIN groups g ON c.group_id = g.id
  15. WHERE
  16. (p.name IN (SELECT v#>>'{}' FROM json_array_elements($products::json) j(v)) OR $products IS NULL)
  17. AND
  18. (c.name IN (SELECT v#>>'{}' FROM json_array_elements($categories::json) j(v)) OR $categories IS NULL)
  19. AND
  20. (g.name IN (SELECT v#>>'{}' FROM json_array_elements($groups::json) j(v)) OR $groups IS NULL)
  21. GROUP BY ROLLUP ("group", category, product)
  22. );
  23. SET product_options = (
  24. SELECT
  25. json_agg(json_build_object(
  26. 'label', value,
  27. 'value', value,
  28. 'selected', value IN (SELECT v#>>'{}' FROM json_array_elements($products::json) j(v))
  29. ) ORDER BY value)
  30. FROM (
  31. SELECT v#>>'{}'
  32. FROM json_array_elements($products::json) j(v)
  33. UNION
  34. SELECT product
  35. FROM sqlpage_groups
  36. ) o(value)
  37. WHERE value IS NOT NULL
  38. );
  39. SELECT 'dynamic' AS component, sqlpage.run_sql('cookie.sql') AS properties;
  40. SELECT 'dynamic' AS component, sqlpage.run_sql('theme.sql') AS properties;
  41. SELECT 'dynamic' AS component, sqlpage.run_sql('nav.sql') AS properties;
  42. SELECT
  43. 'table' AS component,
  44. TRUE AS search,
  45. TRUE AS striped_rows,
  46. TRUE AS small,
  47. 'Notice' AS markdown
  48. ;
  49. SELECT
  50. "Products",
  51. "Categories",
  52. COALESCE("group", "Groups"||'') "Group"
  53. FROM sqlpage_groups q
  54. WHERE q.category IS NULL
  55. ORDER BY product, category, "group"
  56. ;
  57. SELECT '# No Data' AS "Notice"
  58. WHERE NOT EXISTS(SELECT * FROM sqlpage_groups LIMIT 1);