Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги! Я всего лишь новичок в sql. Столкнулся с задачкой, условие которой в принципе полностью описано в заголовке. Насколько я понимаю, подобного рода задачи решаются с использование аналитических функций. Я представляю себе решение так: Код: sql 1. 2. 3. 4. 5. 6. P.S. WEEK_DAY_NUM - номер дня недели(от 1 до 7) У меня предчувствие, что кейс тут и не нужен, просто необходимо корректно задать интервал после "order by week_day_num", а вот как это сделать пока не пойму. И еще можно ли таким способом вычислять среднюю сумму? Помогите пл3 люди добрые!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 15:25 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
1) MySQL не знает про оконные функции. 2) Очень мутная формулировка. Попробуйте сформулировать вопрос более вменяемо. КВ крайнем случае примером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 16:10 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Akina, вопрос задачи передал полностью. Признаюсь, мне он тоже не совсем понятен. Но что есть, то есть. Повторю - необходимо вывести. Суммарные продажи за день на магазине усредненные до продаж с понедельника по четверг Суммарные продажи за день на магазине усредненные до продаж с пятницы по воскресенье. Все данные имеются: поле номера дня недели (WEEK_DAY_NUM), поле суммы продаж за определенный магазин, определенного типа магазина, определенного вида товара, текущей даты(SALE_SUM). Остальная информация избыточна. Я точно уверен что решается путем применения аналитических функций. Примерный вид я написал, но его как то надо доработать, чтобы за окна(1-4 и 5-7) вычислялась на каждый день эта усредненная сумма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 16:35 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
То есть нужна среднесуточная продажа в период с понедельника по четверг и с пятницы по воскресенье? Ну не вижу проблемы... будет что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 20:19 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
AkinaТо есть нужна среднесуточная продажа в период с понедельника по четверг и с пятницы по воскресенье? Ну не вижу проблемы... будет что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. Вы имели в виду ? Код: sql 1. 2. Вот целиком условие задачи. Я чет с самого начала подумал про аналитические функции. Возможно все проще. Признаюсь условие задачи замудренное и весьма непонятно сформулировано. :Задача Исходные данные: Представление с продажами V_SALE следующей структуры DAY_ID -- День продажи, тип дата SHOP -- Магазин ART_ID -- Товар TYPE-- Тип (1, 2, 3) --зависит от магазина SALE_SUM - Сумма продажи Первые три поля являются уникальным ключом Строк с нулевыми продажами в таблице нет. Представление дней недели V_DAY DAY_ID - День, тип дата WEEK_DAY_NUM - Номер для недели в числовом формате Понедельник = 1, воскресенье = 7 WEEK_ID - Номер года и недели в года в формате 201532 Задача: Необходимо по каждому магазину проанализировать продажи за 32, 33 неделю 2015 года и получить на выходе следующие поля День, когда в магазине отсутствуют продажи можно не учитывать при рассчете средней. Сделать за одно обращение к таблице V_SALE в одном запросе, без использования Common table expression (конструкция with) Список полей: Номер недели - Группируемое Магазин - Группируемое Формат - Группируемое Суммарные продажи за анализируемый период Суммарные продажи за день на магазине усредненные до продаж с понедельника по четверг Суммарные продажи за день на магазине усредненные до продаж с пятницы по воскресенье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 22:39 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Rust_CohleВы имели в видуПопробуйте почитать справку по функции, что ли... http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 22:41 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Как вы относитесь к такому варианту решения? Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 22:57 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Rust_CohleВот целиком условие задачи [skipped] День, когда в магазине отсутствуют продажи можно не учитывать при рассчете средней. Вот будь там слово "нужно" - я бы понял. А так получается - считай, как заблагорассудится. И, кстати, 19953120 построен для того, чтобы УЧИТЫВАТЬ такие дни. Если их не учитывать, то делить надо не на 3 или 4, а на COUNT(DISTINCT `date`). Rust_CohleПредставление дней недели V_DAY DAY_ID - День, тип дата WEEK_DAY_NUM - Номер для недели в числовом формате Понедельник = 1, воскресенье = 7 WEEK_ID - Номер года и недели в года в формате 201532 Вот оно чё, Михалыч... а где гарантия, что данные согласованы? что и день недели, и номер недели правильно соответствуют дате.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 23:06 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Akina, А нельзя обойтись просто функцией AVG()? Ей же не важно, есть дни без продаж или же их нет. Она посчитает среднее по тому количеству, которое имеется по факту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 23:22 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Rust_CohleА нельзя обойтись просто функцией AVG()?Ему нужна не средняя сумма одной продажи, а средняя суммарная продажа за день, т.е. AVG(SUM()). А это либо подзапрос и 2 группировки, либо эмуляция AVG на кейсах и одна группировка. Мне кажется, что второй вариант будет быстрее - впрочем, зависит от структуры и наполнения, нужно тестить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 08:03 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Akina, Благодарю вас за помощь! У этой задачки есть еще одно дополнительное условие. "Вывести такой же набор полей, только все магазины с TYPE=2 и =3 сгруппировать до типа, а для магазинов с TYPE=1 оставить детализацию до магазина." Всего 3 типа магазинов. Пока не могу сообразить как это все перегруппировать:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 12:26 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Получается. что у наборов разные уровни группировки. делай 2 отдельных запроса, и Union all. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 12:28 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
AkinaПолучается. что у наборов разные уровни группировки. делай 2 отдельных запроса, и Union all. Получается, что второй селект будет такой же за исключением: уровень группировки не по 3 полям, а по 2. Но тогда и количество выводимых данных изменится на -1, а оно должно быть одинаковым при использовании Union all. Подскажите как эту коллизию обойти? Мой запрос возвращает ошибку - "Все запросы, объединенные с помощью операторов UNION, INTERSECT или EXCEPT, должны иметь одинаковое число выражений в целевых списках." :Запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 15:01 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Rust_Cohleтогда и количество выводимых данных изменится на -1 Ну добавь недостающее поле литералом: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 16:36 |
|
||
|
Найти суммарные продажи за день, усредненные до продаж с 1 по 4 и с 5 по 7.
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо большое) И самое последнее доп. условие к текущей задачи следующее. Необходимо вывести тот же список полей, только вывести группировку как в разрезе магазинов, так и в разрезе только до уровня типов, без детализации до магазинов. Группировка до недели остается. Тут я вообще теряюсь в догадках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 18:16 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39358358&tid=1831138]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 134ms |

| 0 / 0 |
