Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 3.80 KB | None | 0 0
  1. CREATE TABLE `film` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(255) NOT NULL,
  4.   `duration` time,
  5.   PRIMARY KEY (`id`)
  6. );
  7.  
  8. CREATE TABLE `seans` (
  9.   `id` int(11) NOT NULL AUTO_INCREMENT,
  10.   `film_id` int(11) NOT NULL,
  11.   `start` datetime,
  12.   `price` int(11),
  13.   PRIMARY KEY (`id`),
  14.   FOREIGN KEY (`film_id`) REFERENCES `film` (`id`)
  15. );
  16.  
  17. CREATE TABLE `bilet` (
  18.   `id` int(11) NOT NULL AUTO_INCREMENT,
  19.   `seans_id` int(11) NOT NULL,
  20.   PRIMARY KEY (`id`),
  21.   FOREIGN KEY (`seans_id`) REFERENCES `seans`(`id`)
  22. );
  23.  
  24. INSERT INTO `film` VALUES (1,'Aaa','01:00:00'),(2,'Bbb','01:30:00'),(3,'Ccc','02:00:00'),(4,'Ddd','01:20:00');
  25. INSERT INTO `seans` VALUES (1,1,'2005-08-12 09:00:00',100),(2,1,'2005-08-13 09:00:00',200),(3,1,'2005-08-14 10:00:00',300),(4,2,'2005-08-12 12:00:00',100),(5,2,'2005-08-12 18:00:00',100),(6,2,'2005-08-12 19:00:00',100),(7,3,'2005-08-12 09:30:00',150);
  26. INSERT INTO `bilet` VALUES (1,1),(2,1),(3,1),(4,1),(5,2),(6,2),(7,2),(8,2),(9,2),(10,2),(11,2),(12,2),(13,3),(14,3),(15,3),(16,4),(17,5),(18,6),(19,6),(20,7);
  27.  
  28. -- Запросы
  29.  
  30. select * from film;
  31. select * from seans;
  32. select * from bilet;
  33.  
  34. -- ошибки в расписании (фильмы накладываются друг на друга), отсортированные по возрастанию времени.
  35. -- Выводить надо колонки «фильм 1», «время начала», «длительность», «фильм 2», «время начала», «длительность».
  36. select
  37. f.name,
  38. s.start,
  39. f.duration,
  40. f2.name,
  41. s2.start,
  42. s2.price
  43. from seans s
  44. join film f on s.film_id = f.id
  45. join seans s2 on s2.start > s.start and s2.start < date_add(s.start, interval f.duration HOUR_SECOND)
  46. join film f2 on s2.film_id = f2.id
  47. order by s.start asc;
  48.  
  49. -- перерывы больше или равные 30 минут между фильмами, выводятся по уменьшению длительности перерыва.
  50. -- Выводить надо колонки «фильм 1», «время начала», «длительность», «время начала второго фильма», «длительность перерыва».
  51. select
  52. s1.id,
  53. s1.film_id,
  54. s1.start,
  55. f1.duration,
  56. timediff( min(s2.start), date_add(s1.start, interval f1.duration HOUR_SECOND) ) as break
  57. from seans s1
  58. join film f1 on s1.film_id = f1.id
  59. left join seans s2 on s1.start < s2.start
  60. group by s1.start
  61. HAVING time_to_sec(break) > 60 * 30
  62. ORDER BY break DESC;
  63.  
  64. -- список фильмов, для каждого указано общее число посетителей за все время, среднее число зрителей за сеанс и общая сумма сбора по каждому, отсортированные по убыванию прибыли.
  65. -- Внизу таблицы должна быть строчка «итого», содержащая данные по всем фильмам сразу.
  66. (select
  67. s.film_id,
  68. count(*) as total_all_time,
  69. count(*) / count(distinct b.seans_id) as avg_buyed,
  70. sum(s.price) as total_price
  71. from seans s
  72. join bilet b on s.id = b.seans_id
  73. GROUP BY s.film_id
  74. ORDER BY total_price desc
  75. )
  76. union
  77. select "Итого", count(*), count(b.seans_id) / count(distinct b.seans_id), sum(s.price)
  78. from seans s
  79. join bilet b on s.id = b.seans_id;
  80.  
  81. -- число посетителей и кассовые сборы, сгруппированные по времени начала фильма: с 9 до 15, с 15 до 18, с 18 до 21, с 21 до 00:00.
  82. select hour(s.start), sum(price), count(*) from seans s
  83. join bilet b on s.id = b.seans_id
  84. group by
  85. (hour(start) >= 9 and hour(start) < 15),
  86. (hour(start) > 15 and hour(start) < 18),
  87. (hour(start) > 18 and hour(start) < 21),
  88. (hour(start) > 21 and hour(start) < 00)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement