| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Возможно ли составить такой SQL запрос? |
| Автор: BigTon 6.6.2012, 21:13 |
| Добрый день! Таблица tableA f1 f2 f3 f4 f5 1 1 1 a 3 1 1 1 b 1 1 1 1 c 11 1 2 1 e 3 1 2 1 d 1 1 2 1 c 15 Запрос 1 SELECT *, MAX(`f5`) AS `f5` FROM `table` WHERE `f1` IN (1) AND `f2` IN (1, 2) AND `f3` IN (1) AND `f4` IN ('a', 'c') GROUP BY `f1`, `f2`, `f3` Результат 1 f1 f2 f3 f4 f5 1 1 1 c 11 1 2 1 c 15 Запрос 2 SELECT *, MAX(`f5`) AS `f5` FROM `table` WHERE `f1` IN (1) AND `f2` IN (1, 2) AND `f3` IN (1) AND `f4` IN ('a', 'c') GROUP BY `f1`, `f2`, `f3` Результат 2 f1 f2 f3 f4 f5 1 1 1 c 11 Запрос 3 ? Результат 3 f1 f2 f3 f4 f5 1 1 1 c 11 1 2 1 NULL NULL Вопрос: как нужно переформулировать запрос 2, чтобы получился результат 3? Смысл в том, чтобы составить такой запрос, чтобы получить Результат 1 и 3. Структура таблицы и данные: CREATE TABLE IF NOT EXISTS `tableA` ( `f1` int(11) NOT NULL, `f2` int(11) NOT NULL, `f3` int(11) NOT NULL, `f4` varchar(1) NOT NULL, `f5` int(11) NOT NULL, KEY `f1` (`f1`,`f2`,`f3`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `tableA` (`f1`, `f2`, `f3`, `f4`, `f5`) VALUES (1, 1, 1, 'a', 3), (1, 1, 1, 'b', 1), (1, 1, 1, 'c', 11), (1, 2, 1, 'e', 3), (1, 2, 1, 'd', 1), (1, 2, 1, 'c', 15); |
| Автор: Akina 6.6.2012, 21:22 |
| Не вижу описания логики необходимого запроса. |
| Автор: BigTon 6.6.2012, 21:36 |
| У меня 2 проблемы - запрос 1 составлен не верно, на самом деле он не возвращает результат 1; и нужно как то переформулировать запрос чтобы получить строку с ф4 и ф5, где ф5 имеет максимальное значение при групировке. - переформулировать запрос 1 так чтобы в случае если искомые ф1ф2ф3 есть, а ф4 нет, то вместо ф4 и ф5 фозвращались null |
| Автор: Akina 7.6.2012, 08:10 |
| Ещё раз повторю. Сформулируй чистую и точную постановку задачи. Что из чего и (главное!) по какому принципу следует получить. |