|
|
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
Приветствую! Подскажите, пожалуйста, люди добрые, как отсортировать записи учитывая максимальное значение в одном поле + минимальное во втором? Есть таблица: CREATE TABLE `params` ( `id` int(11) NOT NULL AUTO_INCREMENT, `param1` int(11) NOT NULL, `param2` int(11) NOT NULL, `param3` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM; Нужно, чтобы результаты выводились учитывая максимальное значение param1 и минимальное param3, чтобы найти усреднение между этими полями и отсортировать по максимуму param1, но учитывая минимум param3. В идеале конечно было бы учитывать и минимальное значение param2, т.е. так: вывод максимума param1 учитывая минимум param2 и param3. Как только не пробовал, не получается добиться нужного результата. Пробовал так: SELECT MAX( param1) AS price, param2, param3 FROM params GROUP BY param3 ORDER BY price SELECT * FROM `params` ORDER BY MAX(param1), MIN(param2), MIN(param3) Буду очень признателен, кто поможет понять как составить запрос. Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 00:33:28 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-max, приведите пример (4-10 строчек) исходных данных и желаемого результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 06:40:30 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
javajdbc, Благодарю за реагирование! Исходные данные: 4 3 1 1 2 5 6 1 6 5 4 2 5 5 2 Желаемый результат: 5 4 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3 4 3 1 - потому что 4 максимум в param1, а 1 минимум в param3 и разница между param1 и param3 = 3 5 5 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3 6 1 4 - потому что 6 максимум в param1, а 4 минимум в param3 и разница между param1 и param3 = 2 1 2 5 - потому что 1 максимум в param1, а 5 минимум в param3 и разница между param1 и param3 = 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 09:30:45 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-max5 4 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3 4 3 1 - потому что 4 максимум в param1, а 1 минимум в param3 и разница между param1 и param3 = 3 5 5 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3Уже тут непонятно: -"максимум пар1" - совпадает в 1 и 3 строках -"минимум пар3" - совпадает в 1 и 3 строках -разница между пар1 и пар3 - совпадает в 1 и 3 строках Тем не менее между ними почему-то затесалась строка с другими значениями... И вообще, максимум в пар1 - не 5, а 6. Да и минимум пар3 - не 2, а 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:03:10 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
tanglirfresh-max5 4 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3 4 3 1 - потому что 4 максимум в param1, а 1 минимум в param3 и разница между param1 и param3 = 3 5 5 2 - потому что 5 максимум в param1, а 2 минимум в param3 и разница между param1 и param3 = 3Уже тут непонятно: -"максимум пар1" - совпадает в 1 и 3 строках -"минимум пар3" - совпадает в 1 и 3 строках -разница между пар1 и пар3 - совпадает в 1 и 3 строках "И вообще, максимум в пар1 - не 5, а 6." - это верно, но если учитывать разницу, то в строке 5 4 2 и 5 5 2 она 3, а в строке 6 1 6 - 5! соответственно строка 6 1 6 должна быть ниже, чем строки 5 4 2 и 5 5 2. "Да и минимум пар3 - не 2, а 1." тут тоже верно, но так как в строке 5 4 2 парам1 5 и он больше чем в строке 4 3 1, а мне нужно сортировать по максимуму парам1, то строка 5 4 2 должна быть выше чем 4 3 1, так как разница у них между парам1 и парам 2 равная, но в строке 5 4 2 парам1 больше. Я в желаемом результате ошибся в строке 6 1 4, должна быть 6 1 6. Мне думается должен быть запрос на выявление макс. значения в парам1 и мин. в парам3, но вот как его правильно составить понять не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:20:41 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-max, Запутался я что-то с примером, строка 616 должна наверно быть 611 вообще :)) Сообщение нельзя редактировать, а с ответом поспешил, прошу прощения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:26:30 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
продолжаем fresh-max"И вообще, максимум в пар1 - не 5, а 6." - это верно, но если учитывать разницу, то в строке 5 4 2 и 5 5 2 она 3, а в строке 6 1 6 - 5! соответственно строка 6 1 6 должна быть ниже, чем строки 5 4 2 и 5 5 2."в строке 5 4 2 и 5 5 2 она 3" - это, очевидно, разница между п1 и п3 "а в строке 6 1 6 - 5!" - а тут между чем и чем? 1 и 2? 2 и 3? ну всяко не 1 и 3 fresh-maxто строка 5 4 2 должна быть выше чем 4 3 1, так как разница у них между парам1 и парам 2 равная, но в строке 5 4 2 парам1 больше.теперь вы считаете разницу между 1 и 2, а до этого считали разницу между 1 и 3... ЯНХНП ЗЫ. 1231-22-31-3=max1=max2=max3542123---431123---552033-+-6165-50+-+125-1-3-4---Вот хоть убей, никакой системы не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:28:37 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
tanglirпродолжаем )) 5 4 2 - разница между п1 и п3 = 3 и при этом п1 = 5 и он больше чем во 2-й строке 4 3 1 - разница между п1 и п3 = 3 и при этом п1 = 4, поэтому ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2 5 5 2 - разница между п1 и п3 = 3 и при этом п1 = 5 6 1 1 - разница между п1 и п3 = 5, поэтому это вариант еще ниже 3-й строки 1 2 5 - ну а этот вариант вообще последний, так как п1 = 1, а п3 = аж 5 Теперь вроде всё верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:42:09 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-maxразница между п1 и п3 = 3 и при этом п1 = 4, поэтому ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2стоп-стоп-стоп с первой строкой вы сравниваете по п1 с третьей стрококй вы сравниваете по п3 это ***** как??! Да плюс к тому fresh-max5 4 2 - разница между п1 и п3 = 3 и при этом п1 = 5 и он больше чем во 2-й строке 4 3 1 - разница между п1 и п3 = 3 и при этом п1 = 4, поэтому ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2 5 5 2 - разница между п1 и п3 = 3 и при этом п1 = 5 а почему вы вот тут не дописали "и он больше чем во 2-й строке"? в чём отличие-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:48:35 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
tanglir, "с первой строкой вы сравниваете по п1 с третьей стрококй вы сравниваете по п3" Не, вообще во всех строках надо п1 сравнивать с п1 во всех строках на выявления максимума, но при этом еще сравнивать во всех строках п3 с п3 на выявление минимума. Может это не выполнимая задача вообще? "а почему вы вот тут не дописали "и он больше чем во 2-й строке"? в чём отличие-то?" Допишу полный вариант тогда, думал не нужно объяснять эту строку: 5 4 2 - разница п1 и п3 = 3 и при этом п1 = 5 и он больше чем во 2-й строке у п1 4 3 1 - разница п1 и п3 = 3 и при этом п1 = 4, поэтому 2-я строка ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2 5 5 2 - разница п1 и п3 = 3 и при этом п1 = 5, но в этой строке п2 = 5, а это больше чем в 1-й и 2-й строке у п2 6 1 1 - разница п1 и п3 = 5, поэтому это вариант еще ниже 3-й строки 1 2 5 - ну а этот вариант вообще последний, так как п1 = 1, а п3 = аж 5 Вот не знаю, есть ли логика в этом, но я её вижу. :)) в строке 5 5 2 в процессе объяснения добавилось еще сравнение по п2)) 6 1 1 - разница п1 и п3 = 5 - это лучшая строка, у неё еще и п2 = 1! 4 3 1 - разница п1 и п3 = 3 - уже менее, но лучше чем 3-я строка, потому что п2 больше чем в 1-й строке, но меньше чем в 3-й 5 4 2 - разница п1 и п3 = 3 - уже по-хуже, но не так сильно, как 4-я строка, потому что п2 у 4-й строки = 5 5 5 2 - разница п1 и п3 = 3 - хуже второго варианта, так как п2 = 5 1 2 5 - а эта строка самая последняя, потому что не зависимо от разницы между п1 и п3, п3 = 5, да еще и п1 = всего 1, а это самый худший вариант Вот теперь вроде логику донёс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 11:24:23 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-maxразница п1 и п3 = 3 и при этом п1 = 4, поэтому 2-я строка ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2Те же яйца, вид сбоку (с) С тем же успехом их можно расположить так 542 431 552 и аргументировать абсолютно теми же словами: разница п1 и п3 = 3 и при этом п1 = 4, поэтому 2-я строка ниже 1-й строки, но выше 3-й строки, потому что во 2-й строке п3 = 1, а в 3-й п3 = 2 Думайте дальше fresh-max5 5 2 - разница п1 и п3 = 3 и при этом п1 = 5, но в этой строке п2 = 5, а это больше чем в 1-й и 2-й строке у п2 6 1 1 - разница п1 и п3 = 5, поэтому это вариант еще ниже 3-й строки 1 2 5 - ну а этот вариант вообще последний, так как п1 = 1, а п3 = аж 5Жесть какая :) В первых трёх строках у вас п1-п3=3. В четвёртой п1-п3=5, поэтому (вы пишете) она ниже. Кагбэ логично предположить, что где-то должна стоять сортировка по (п1-п3) desc. Однако тут же мы видим, что строка под номером пять имеет (п1-п3)=-4. Да при деск-сортировке она вообще первой должна быть! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 11:55:01 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
tanglirрасположить так 542 431 552ну то есть вот так: 552 431 542 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 11:55:39 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
И не деск-сортировка, а аск, но как ни назови, сортировать должно в одну сторону, а у вас получается сначала 3, потом 5, а потом -4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 11:56:57 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
tanglir, Тут не получится только по DESC или ASC, пробовал - не выходит, получается только одному из столбцов сортировать, а нужно по 3-м, видимо. Последний пример который приводил подробно уже описывает то, что нужно по-идее. Вот этот вариант: 6 1 1 - разница п1 и п3 = 5 - это лучшая строка, у неё еще и п2 = 1! 4 3 1 - разница п1 и п3 = 3 - уже менее, но лучше чем 3-я строка, потому что п2 больше чем в 1-й строке, но меньше чем в 3-й 5 4 2 - разница п1 и п3 = 3 - уже по-хуже, но не так сильно, как 4-я строка, потому что п2 у 4-й строки = 5 5 5 2 - разница п1 и п3 = 3 - хуже второго варианта, так как п2 = 5 1 2 5 - а эта строка самая последняя, потому что не зависимо от разницы между п1 и п3, п3 = 5, да еще и п1 = всего 1, а это самый худший вариант :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 12:29:38 |
|
||
|
выбор записи по максимальному и минимальному значению из нескольких полей
|
|||
|---|---|---|---|
|
#18+
fresh-max6 1 1 - разница п1 и п3 = 5 - это лучшая строка, у неё еще и п2 = 1! 4 3 1 - разница п1 и п3 = 3 - уже менее, но лучше чем 3-я строка, потому что п2 больше чем в 1-й строке, но меньше чем в 3-й 5 4 2 - разница п1 и п3 = 3 - уже по-хуже, но не так сильно, как 4-я строка, потому что п2 у 4-й строки = 5 5 5 2 - разница п1 и п3 = 3 - хуже второго варианта, так как п2 = 5 order by p1-p3 desc, p2, p1 fresh-maxпотому что не зависимо от разницы между п1 и п3, п3 = 5, да еще и п1 = всего 1, а это самый худший варианта вот тут хз что вы имели в виду, но в мой вариант это всё равно укладывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:25:55 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38638224&tid=1834849]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 294ms |

| 0 / 0 |
