@cajka-d

Как подсчитать одинаковые ответы в таблицы MySQL для каждого учреждения?

Есть три таблицы.

Таблица учреждений.
CREATE TABLE list_institutions (
	`id_institution` INT NOT NULL AUTO_INCREMENT,
	`uid_category` INT NOT NULL,
	`region` VARCHAR(100) NOT NULL,
    `area` VARCHAR(100) NOT NULL,
    `city` VARCHAR(100) DEFAULT '',
    `name_institution` VARCHAR(100) NOT NULL,
	PRIMARY KEY (`id_institution`),
	FOREIGN KEY (uid_category) REFERENCES list_categories(id_category) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;


Таблица полей/вопросов для анкеты
CREATE TABLE list_fieldes (
	`id_field` INT NOT NULL AUTO_INCREMENT,
    `type_field` VARCHAR(100) NOT NULL,
    `name_field` TEXT NOT NULL,
    `options_field` TEXT DEFAULT NULL,
    `required_field` INT DEFAULT NULL,
    `uid_form` INT NOT NULL,
	PRIMARY KEY (`id_field`),
	FOREIGN KEY (uid_form) REFERENCES list_form(id_form) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;


И таблица с ответами учреждений на вопрос анкеты
CREATE TABLE list_answers (
	`id_answer` INT NOT NULL AUTO_INCREMENT,
    `uid_field` INT NOT NULL,
    `uid_questionnaire` INT NOT NULL,
	`uid_institution` INT NOT NULL,
    `answer_user` VARCHAR(300) NULL,
	PRIMARY KEY (`id_answer`),
	FOREIGN KEY (uid_field) REFERENCES list_fieldes(id_field) ON DELETE CASCADE,
	FOREIGN KEY (uid_questionnaire) REFERENCES list_questionnaires(id_questionnaire) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;


Задача в том, что нужно узнать для каждого учреждения кол-во одинаковых ответов. Сами ответы хранятся в таблице list_answers, столбец answer_user, также в этой таблице есть столбц uid_field, котором храниться номер вопроса, к которому принадлежит ответ.
Можно ли это как-то сделать одним запросом?
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 2
Zarom
@Zarom
Мастер на все руки из жопы
Можно ли это как-то сделать одним запросом?

Можно
Ответ написан
idShura
@idShura
SELECT   I.NAME_INSTITUTION,
         A.UID_FIELD,
         A.ANSWER_USER,
         COUNT (*) CNT_ANSWER
    FROM LIST_INSTITUTIONS I
         LEFT JOIN LIST_ANSWERS A ON A.UID_INSTITUTION = I.ID_INSTITUTION
GROUP BY I.NAME_INSTITUTION, A.UID_FIELD, A.ANSWER_USER
  HAVING COUNT (*) > 1
Ответ написан
Ваш ответ на вопрос

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

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