Skip to content

Instantly share code, notes, and snippets.

@BrightMilk
Last active July 25, 2022 06:56
Show Gist options
  • Select an option

  • Save BrightMilk/9801085164ba5535d5f9e61dadb5ef0e to your computer and use it in GitHub Desktop.

Select an option

Save BrightMilk/9801085164ba5535d5f9e61dadb5ef0e to your computer and use it in GitHub Desktop.
Задание №1 для B2B-Center

Решение задания 1.

SQL-запрос выглядит следующим образом:

CREATE TABLE db.`user` (
	id INT auto_increment NOT NULL,
	name varchar(100) NOT NULL,
	gender_id INT NOT NULL,
	birthdate DATE NOT NULL,
	CONSTRAINT user_PK PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;

CREATE TABLE db.gender (
	id INT auto_increment NOT NULL,
	name varchar(100) NOT NULL,
	description varchar(100) NULL,
	CONSTRAINT gender_PK PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;

CREATE TABLE db.phone_number (
	id INT auto_increment NOT NULL,
	`number` varchar(255) NOT NULL,
	user_id INT NOT NULL,
	CONSTRAINT phone_number_PK PRIMARY KEY (id),
	
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;

ALTER TABLE db.`user` ADD CONSTRAINT user_FK FOREIGN KEY (gender_id) REFERENCES db.gender(id);
ALTER TABLE db.`phone_number` ADD CONSTRAINT phone_number_FK FOREIGN KEY (user_id) REFERENCES db.`user`(id);

INSERT INTO db.gender (name,description)
	VALUES ('male','Мужчина'),
	VALUES ('female','Женщина');
	
INSERT INTO db.`user` (name,gender_id,birthdate)
	VALUES ('Yvonne Mcdowell',2,'1979-10-09'),
	VALUES ('Lareina Harrington',2,'2001-03-22'),
	VALUES ('Carl Espinoza',1,'1999-01-01'),
	VALUES ('Mallory Buck',2,'2002-12-02'),
	VALUES ('Althea Morton',2,'2001-09-17'),
	VALUES ('Shannon Fry',2,'1992-07-12'),
	VALUES ('Chaim Rogers',1,'2002-11-11'),
	VALUES ('Rachel Payne',2,'2001-08-13'),
	VALUES ('Matthew Casey',1,'2000-10-25'),
	VALUES ('Baxter Thornton',1,'1998-06-09');

INSERT INTO db.phone_number (`number`,user_id)
	VALUES ('(667) 281-8687',1),
	VALUES ('1-922-306-2043',2),
	VALUES ('1-232-249-6217',3),
	VALUES ('1-604-197-3522',4),
	VALUES ('(279) 852-2417',5),
	VALUES ('(218) 766-7412',6),
	VALUES ('(502) 213-6740',7),
	VALUES ('1-344-205-3086',8),
	VALUES ('1-380-420-6513',9),
	VALUES ('(782) 347-5271',10),
	VALUES ('(876) 626-2755',4),
	VALUES ('(846) 528-8542',8),
	VALUES ('1-422-658-7136',2),
	VALUES ('1-168-395-6412',4),
	VALUES ('(451) 437-3685',5),
	VALUES ('1-222-623-1235',2),
	VALUES ('1-713-424-7400',3);

Запрос, возвращающий имя и число указанных телефонных номеров девушек в возрасте от 18 до 22 лет, выглядит следующим образом:

SELECT u.`name`, count(pn.`id`) AS `amount of numbers` FROM testovoe.`user` u 
	JOIN testovoe.`phone_number` pn ON pn.`user_id` = u.`id`
WHERE u.`gender_id` = 2 AND TIMESTAMPDIFF(YEAR, u.`birthdate`, CURDATE()) BETWEEN 18 AND 22
GROUP BY pn.`user_id`;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment