Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Ещё раз повторю.

Сформулируй чистую и точную постановку задачи. Что из чего и (главное!) по какому принципу следует получить.

Автор: Zloxa 7.6.2012, 09:28
Цитата(BigTon @  6.6.2012,  22:36 Найти цитируемый пост)
переформулировать запрос 1 так чтобы в случае если искомые ф1ф2ф3 есть, а ф4 нет, то вместо ф4 и ф5 фозвращались null 

Код

select f1,f2,f3
      ,max(case when f4 in ('a','c') then f5 end) as f5
  from table
 where f1 in (1)
   and f2 in (1,2)
   and f3 in (1)
 group by f1,f2,f3


Добавлено через 4 минуты и 28 секунд
Цитата(BigTon @  6.6.2012,  22:36 Найти цитируемый пост)
строку с ф4 и ф5, где ф5 имеет максимальное значение при групировке.

stff http://forum.vingrad.ru/act-Search/CODE/show/searchid-208a565bd49fd1c6fb95c766edcce976/search_in-posts/result_type/posts/flag/search/highlite/%25D0%25B1%25D0%25B0%25D0%25B1%25D1%2583%25D1%2588%25D0%25BA%25D0%25B8%25D0%25BD+%25D0%25BC%25D0%25B5%25D1%2582%25D0%25BE%25D0%25B4/index.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)