Задавайте вопросы, мы ответим
Вы не зашли.
select
field1 / field2 as Number1
field2 / field4 as Number2
Number1 дает 1
Number2 дает 1,3333333
Как-то можно задать тип, чтобы было 1,00 и 1,33?
спасибо
Неактивен
В каком контексте осуществляется печать? Кажется, что это способ вывода в скрипте. Если PHP, используйте printf
Неактивен
Нет, в ПХП я вообще без проблем данные в нужный вид приведу. ПРосто хотел максимум калькуляций сделать в скуле. Если это проблематично - то в пхп сделаю, там это элементарно.
Смысл такой, что конечные данные выводятся в таблицу и для глаза восприятие гораздо лучше, когда числа одинаково выглядят, а не так, что одно из одного знака, а одно из 10. Ну и там таких строк 30 штук, всё в разнобой получается.
Отредактированно Bust_Ed (10.12.2013 10:15:38)
Неактивен
Подозреваю, что MySQL возвращает число в виде float, но вы его печатате средствами php и эти средства округляют до целого.
Неактивен
Да нет, это сам MySQL выводит. Через myadmin пока запрос составляю, до пхп дело не дошло. ПОле вычисляемое, по умолчанию какой тип имеет? Как-то сменить тип можно?
Неактивен
Какая версия MySQL, какой именно запрос? Не воспроизводится:
Неактивен
Попробуйте явно задать формат
Неактивен
Спасибо, как раз то, что я искал, только 5 поменял на 2, осталось два знака после запятой, полностью устраивает такое решение.
Неактивен
SELECT FORMAT(a/b,2) as F FROM a
Order by F desc
не сортирует.
Вот так получается:
F
72.00
7.00
61.00
6.00
6.00
50.00
Т.е. сортирует, но как стринг, похоже... как int можно отсортировать?
Неактивен
Сортирует, но по строке. Нужно сортировать по самому значению
Неактивен
Если order by F, то в реальной таблице вывод такой:
90
9
9
8
75
60
6
6
6
5
5
...
Если по формуле, которая считает F (Order BY IF(SUM(allgames.Team2SetPoints)=0, FORMAT(SUM(allgames.Team1SetPoints) * 100 / (SELECT COUNT(Distinct team2) from `match` where `match`.tournament_id = allgames.tournament_id), 2), FORMAT( SUM(allgames.Team1SetPoints) / SUM(allgames.Team2SetPoints), 2)) DESC)
вывод такой:
9
9
112,5
90
8
6
6
6
60
75
5
5
4,5
4,5
4,5
4,33
4
3,67
3,6
3
3
3
3
42,86
И если в первом случае видна сортировка по стринг, то во втором случае я логики вообще не вижу. Т.е., конечно, он "немножко" сортирует. Но все равно не очень ясно как и, главное, не так, как надо.
Если надо - могу дать все значения исходных (а,b).
Неактивен
У вас очень сложное выражение с подзапросами - лучше его поместить в область SELECT:
Неактивен
Сейчас попробую.
С ходу вопрос:
SELECT a/b F0, FORMAT(a/b,2) as F FROM a Order by F0 DESC;
Я пишу SELECT a/b AS F0, вы AS опускаете. Мне с AS более читабельно, хотел понять в чем-то существенная разница есть?
Неактивен
AS можно опускать, разницы нет. Это достаточно общепринятая практика заменять AS на пробел
Неактивен
Спасибо.
В самом селекте ничего не менял, просто в сортировке убрал форматирование, все встало на свои места.
Неактивен
Ну, кажется, окончательно встрял.
Идея такая, что теперь результат запроса (где есть формат и есть сортировка и все правильно) сохраняется в темп таблицу.
И вот если в этой темп таблице сортировать:
8,00
48,00
42,00
38,18
2,10
Вот такая сортировка получается...
Неактивен
Вы заносите во временную таблицу отформатированные числа, но лучше их сохранять числами до последнего этапа, а потом уже форматировать. В вашем случае, во временной таблице они являются строками varchar. Можно преобразовать в число с помощью ORDER BY x+0.0, но при этом не будет использоваться индекс по этому полю.
Неактивен
Точно. Нужно убрать все форматирование, которое сделано до временной таблицы. Оно мне там не нужно. Тогда и сортировка красивше выглядеть будет. Но ваше решение весьма элегантное, учитывая, что ничего менять не нужно.
Пока временно сделаю так, а чуть позже уберу форматирование отовсюду, оставлю уже в самом финале его.
Индекс не очень нужен, там 200 строк во временной таблице, не думаю, что он прям сильно повлияет на производительность.
Отредактированно Bust_Ed (16.12.2013 08:21:43)
Неактивен