@vlad_lutsky

Как правильно построить MySql запрос?

Задание - построить таблицу числа заболевших по дате рождения (столбцы – года);
Суть - мы берем из таблицы `apointments`(посещения) и таблицы `pations`(посетители) данные и смотрим - был ли посетитель на приёме, если да то группируем все его посещения ... MAGIC ... на выходе получаем количество заболевших(кто хоть раз посещал медпункт) по годам рождения:

1992 - 2
1995 - 4
1996 - 2
и тд.

База данных:
mysql_query(" CREATE TABLE IF NOT EXISTS `pations` (
    `id` MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `fio` VARCHAR(255) NOT NULL UNIQUE,
    `male` VARCHAR(255) NOT NULL,
    `age` DATE NOT NULL
	) ENGINE=INNODB", $db);

	mysql_query(" CREATE TABLE IF NOT EXISTS `apointments` (
    `id` MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `date` DATE NOT NULL UNIQUE,
    `idp` VARCHAR(255) NOT NULL,
    `idd` VARCHAR(255) NOT NULL,
    `enter` VARCHAR(255) NOT NULL
	) ENGINE=INNODB", $db);
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
0xD34F
@0xD34F
Берёте apointments, джоините pations, группируете по id посетителя, из даты рождения достаёте год. Полученные данные группируете по году, делаете count. Как-то так:

SELECT `year`, COUNT(*)
FROM (
  SELECT YEAR(p.age) AS `year`, p.id
  FROM apointments a
  JOIN pations p ON p.id = a.idp
  GROUP BY p.id
) t
GROUP BY `year`
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT YEAR(`p`.`age`) as `year`, COUNT(DISTINCT `p`.`id`) as `count`
  FROM `apointments` AS `a`
  JOIN `pations` AS `p` ON `p`.`id` = `a`.`idp`
  GROUP BY YEAR(`p`.`age`)

Только запрос небыстрый, группировка по функции не использует индексы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы