Guest User

Untitled

a guest
Feb 21st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. CREATE TABLE program (
  2. id SMALLINT PRIMARY KEY,
  3. price INT,
  4. name VARCHAR(24)
  5. -- qualification INT
  6. );
  7.  
  8. INSERT INTO program (id, name, price) VALUES
  9. (11, 'Easy Start', 10000),
  10. (12, 'Easy Finish', NULL),
  11. (13, 'Medium Start', 30000),
  12. (14, 'Medium Finish', NULL),
  13. (15, 'Business Start', 90000),
  14. (16, 'Business Finish', NULL),
  15. (17, 'Premium Start', 270000),
  16. (18, 'Premium Finish', NULL);
  17.  
  18. CREATE OR REPLACE VIEW program_view AS
  19. WITH t AS (
  20. SELECT
  21. *,
  22. id % 2 = 0 AS finish,
  23. CASE WHEN id % 2 = 0
  24. THEN 3
  25. ELSE 4 END AS level
  26. FROM program)
  27. SELECT
  28. *,
  29. power(2, t.level) AS width
  30. FROM t;
  31.  
  32. CREATE OR REPLACE VIEW refund AS
  33. SELECT
  34. p2.id,
  35. p2.price,
  36. p2.name,
  37. CASE WHEN p2.price IS NULL
  38. THEN
  39. p1.price * 4 - coalesce(p3.price, 0)
  40. ELSE p2.price END AS refund,
  41. coalesce(p2.price, p1.price * 4) AS cell
  42. FROM program p2
  43. LEFT JOIN program p1 ON p1.id = p2.id - 1
  44. LEFT JOIN program p3 ON p3.id = p2.id + 1;
  45.  
  46. ------------------ node -------------------
  47.  
  48. CREATE TABLE node (
  49. id SERIAL PRIMARY KEY,
  50. "user" INT REFERENCES "user" (id)
  51. ON UPDATE CASCADE ON DELETE CASCADE,
  52. program INT NOT NULL REFERENCES program (id),
  53. invest INT REFERENCES node (id),
  54. parent INT REFERENCES node (id),
  55. created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  56. closed TIMESTAMP,
  57. qualification INT REFERENCES node (id),
  58. time TIMESTAMP
  59. );
  60.  
  61. ALTER SEQUENCE node_id_seq RESTART 100;
  62.  
  63. ----------------- reward ------------------
  64.  
  65. CREATE TABLE reward (
  66. level SMALLINT PRIMARY KEY,
  67. percent FLOAT NOT NULL
  68. );
  69.  
  70. INSERT INTO reward VALUES
  71. (1, 0.40),
  72. (2, 0.07),
  73. (3, 0.03);
  74.  
  75. ----------------- matrix ------------------
  76.  
  77. CREATE VIEW matrix AS
  78. WITH RECURSIVE r(program, root, id, parent, level) AS (
  79. SELECT
  80. program,
  81. id AS root,
  82. id,
  83. parent,
  84. 0 AS "level"
  85. FROM node
  86. UNION
  87. SELECT
  88. n.program,
  89. r.root,
  90. n.id,
  91. n.parent,
  92. r.level + 1 AS "level"
  93. FROM node n
  94. JOIN r ON r.id = n.parent
  95. WHERE r."level" < 50 -- recursion limit
  96. )
  97. SELECT
  98. r.*,
  99. row_number()
  100. OVER (
  101. PARTITION BY root, r."level"
  102. ORDER BY r.id ) AS "offset"
  103. FROM r;
  104.  
  105. CREATE OR REPLACE VIEW matrix_node AS
  106. SELECT
  107. root AS id,
  108. program,
  109. width,
  110. count(*) AS count
  111. FROM matrix m
  112. JOIN program_view p ON m.program = p.id AND m.level = p.level
  113. GROUP BY root, program, width;
  114.  
  115. CREATE OR REPLACE VIEW node_qualification AS
  116. SELECT
  117. *,
  118. (SELECT count(q.*) FROM node q WHERE q.qualification = n.id) as qualified
  119. FROM node n;
Add Comment
Please, Sign In to add comment