Forum Webscript.Ru

Общие => Базы данных => Тема начата: Stas от 05 Сентября 2003, 22:03:47

Название: MAX/MIN v WHERE
Отправлено: Stas от 05 Сентября 2003, 22:03:47
Знатокам SQL..

Хотелось бы чтобы подобный запрос был возможным, однако MySQL такого не разрешает. Знает-ли кто-нибудь как ето можно сделать ?

SELECT IFNULL(MAX(sn),0) AS maxvalue, IFNULL(MIN(sn),0) AS minvalue, IFNULL(((MAX(sn) - MIN(sn))+1),0) AS difference, COUNT(sn) AS qty  FROM callingcards WHERE value=\'3.00\' AND (sn BETWEEN minvalue AND maxvalue);

Знаю что можно с вложенными запросами. А есть ешё способ ?
Название: MAX/MIN v WHERE
Отправлено: fidget от 05 Сентября 2003, 23:28:21
SELECT ... WHERE value=\'3.00\' HAVING sn BETWEEN minvalue AND maxvalue.
Название: MAX/MIN v WHERE
Отправлено: Stas от 05 Сентября 2003, 23:36:52
ERROR 1054: Unknown column \'sn\' in \'having clause\'

??
Название: MAX/MIN v WHERE
Отправлено: Stas от 07 Сентября 2003, 16:46:57
fidget
sn в HAVING блоке не признается...
Название: MAX/MIN v WHERE
Отправлено: fidget от 07 Сентября 2003, 21:07:48
хм .... да, без GROUP BY не хочет .. :(
Кстати, а зачем выбирать значения между минимальным и максимальным значением? они ведь и так так находятся .. или я что-то пропустила?
Название: MAX/MIN v WHERE
Отправлено: Stas от 07 Сентября 2003, 21:41:51
вобшем ето для базы данных телефонных карт. В таком запросе сразу видно есть-ли ошибка.. Т.к. difference ВСЕГДА должна быть равна qty..
Название: MAX/MIN v WHERE
Отправлено: fidget от 08 Сентября 2003, 12:07:00
нет, я не то имела ввиду.
вот у тебя есть столбец sn и ты ставишь ословие выбрать данные, которые находятся между минимальным и  максимальным значением этот самого sn. Вопрос - зачем такое условие? ведь данные и так находятся между минимальным и максимальным значением?
Название: MAX/MIN v WHERE
Отправлено: Stas от 08 Сентября 2003, 12:37:26
fidget
но MIN и MAX значения без условия WHERE (used=1) например ...
Тоесть MIN и MAX значения серииных номеров всех карточек. Тоесть чтобы проверить что диапозон серийных номеров непрерывный.

Тоесть минимальное и махимальное значение всегда будет такое же.. Но если в WHERE иа напишу used=1. То если не все карточки новые, тогда выборка выдасть меньше чем (MAX-MIN)+1