gluck Posted July 31, 2013 Share Posted July 31, 2013 (edited) Честно говоря, я в программировании совсем туп и начал изучать php/mysql недавно. Столкнулся тут с задачей, которую никак не могу придумать как решить: SELECT DATE_FORMAT(date_add, "%b") as m, round(sum((`total_paid_real` - `total_products` + `total_shipping`) /1000)) as z FROM `ПРЕФИКС_orders` where `valid` = 1 group by month(`date_add`) Этот запрос вычисляет прибыль и группирует результаты по месяцам. Делает он это за все время работы. Нужно подсчитать СРЕДНЮЮ прибыль в каждом месяце, для чего каким-то образом нужно вычислить количество месяцев между датой запуска магазина и NOW(). Каким? Сколько например июней было с (например) 20100401 и 2013801? Я ниасилил ни на php, ни на sql Edited August 3, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
absent Posted August 3, 2013 Share Posted August 3, 2013 вот тут возможно тут решение http://www.askdev.ru/mysql/9720/Выборка-данных-за-определенный-период/ Link to comment Share on other sites More sharing options...
gluck Posted August 3, 2013 Author Share Posted August 3, 2013 Похоже что нет Там в задаче есть максимально допустимое количество... не знаю как объяснить в общем нам ни с чем сравнивать не нужно. Link to comment Share on other sites More sharing options...
absent Posted August 3, 2013 Share Posted August 3, 2013 (edited) опиши точнее задачу я попробую решить. Похоже что нет Там в задаче есть максимально допустимое количество... не знаю как объяснить в общем нам ни с чем сравнивать не нужно. Edited August 3, 2013 by absent (see edit history) Link to comment Share on other sites More sharing options...
gluck Posted August 3, 2013 Author Share Posted August 3, 2013 А все просто В результате выполнения скрипта из верхнего поста получается вот такая табличка: Вторая колонка это тупо прибыль, полученная с магазина за все январи, все феврали итд. Задача — вычислить СРЕДНЮЮ прибыль в каждом месяце. Для чего число из второй колонки нужно тупо разделить на количество соответствующих месяцев. Но если бы магазин запустился в январе — нет проблем: sum(now() - 'год запуска'), но его угораздило запуститься в апреле... сталбыть по состоянию на сегодняшний день февралей в истории магазина было на один меньше, чем июлей... Link to comment Share on other sites More sharing options...
absent Posted August 3, 2013 Share Posted August 3, 2013 подумаю, сроков не скажу тк благотворительность. но постараюсь скорее Link to comment Share on other sites More sharing options...
gluck Posted August 4, 2013 Author Share Posted August 4, 2013 Буду премного "ку" А разве не существует некой специальной команды в том же sql например... задача-то вроде как элементарная, всем нужна Link to comment Share on other sites More sharing options...
absent Posted August 4, 2013 Share Posted August 4, 2013 Буду премного "ку" А разве не существует некой специальной команды в том же sql например... задача-то вроде как элементарная, всем нужна я не встречал такого Link to comment Share on other sites More sharing options...
gluck Posted August 29, 2013 Author Share Posted August 29, 2013 Программисты! Неужели никто не знает? Не верю Link to comment Share on other sites More sharing options...
sors Posted August 29, 2013 Share Posted August 29, 2013 count не подходит? Link to comment Share on other sites More sharing options...
gluck Posted August 29, 2013 Author Share Posted August 29, 2013 count чего? общее колво месяцев - нет проблем, а вот сколько было каждого... Link to comment Share on other sites More sharing options...
gluck Posted August 31, 2013 Author Share Posted August 31, 2013 (edited) Вроде бы придумал, покритикуйте. Код $begin = new DateTime( '2010-01-01' ); //дата запуска $end = new DateTime(); $interval = new DateInterval('P1M'); $daterange = new DatePeriod($begin, $interval ,$end); $m = array(); foreach($daterange as $date){ array_push($m, $date->format("M")); } print_r (array_count_values($m)); Результат Array ( [Jan] => 4 [Feb] => 4 [Mar] => 4 [Apr] => 4 [May] => 4 [Jun] => 4 [Jul] => 4 [Aug] => 4 [sep] => 3 [Oct] => 3 [Nov] => 3 [Dec] => 3 ) В реальном скрипте используются номера месяцев с ведущим нолем, то есть $date->format("m") Edited August 31, 2013 by gluck (see edit history) Link to comment Share on other sites More sharing options...
sors Posted August 31, 2013 Share Posted August 31, 2013 (edited) SELECT DATE_FORMAT(date_add, "%b") as m, round(sum((`total_paid_real` - `total_products` + `total_shipping`) /1000)) as z, count(month(`date_add`)) as mount_count FROM `ПРЕФИКС_orders` where `valid` = 1 AND date_add BETWEEN '2013-08-01' AND '2011-08-01' group by month(`date_add`) У вас же данные группируются по месяцам, значит можно посчитать сколько в каждой группе месяцев Edited August 31, 2013 by sors (see edit history) Link to comment Share on other sites More sharing options...
gluck Posted August 31, 2013 Author Share Posted August 31, 2013 Не подходит, потому что в разных месяцах разное колво заказов. Link to comment Share on other sites More sharing options...
Recommended Posts