|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
Пусть есть таблица А (id, name) и таблица B (id, a_id, date, price). Связь А к B 1 ко многим по внешнему ключу A.id -> B.a_id. Необходимо подневно вывести name с максимальной суммой price по этому дню и долю от общего price по дню. Начал как всегда с запросов по отдельности. Вот вывод по каждому name суммы price по каждому дню: Код: sql 1.
Вот вывод суммы price по дню: Код: sql 1.
Уже смущает только одно то, что запросы очень схожи (в первом еще есть только доп. группировка по name). Далее пытаюсь объединить эти части, еще вычисляя максимум по price от первого запроса (чтобы вышло как в задании). Но вышло как-то очень криво... Код: sql 1. 2. 3. 4. 5. 6.
Кучу всего внутри схоже и пересекается, но никак не могу догнать, как это проще написать и возможно ли как-то объединить? Заранее признателен за любую помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 14:17 |
|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
gammaray, Если есть исходные данные, предоставьте и результат, который должен быть в итоге, по этим данным ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 14:42 |
|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
VSVLAD, ну, например, Таблица A id name1 "A1"2 "A2" Таблица B id a_id date price1 1 10.05.2017 1002 2 10.05.2017 2003 1 11.05.2017 1004 2 11.05.2017 2005 1 11.05.2017 1006 1 11.05.2017 100 Результат по дням date name name_price_sum all_price_sum percent10.05.2017 "A2" 200 300 200/300*100 = 66.6%11.05.2017 "A1" 300 500 300/500*100 = 60.0% P.S. В первом посте в объединенном запросе ошибся - везде формат времени ко дню strftime('%Y-%m -%d ', date) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 15:28 |
|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
gammaray, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
* Подзапрос b_grp - вынужденная группировка, т.к. в один день может быть несколько прайсов на один и тот же нейм * Подзапрос b_grp2 - группируем по дню максимальную цену и сумму всех цен, потом связывая максимальную цену с основной таблицей, узнаём имя того продукта, который имел эту цену. В вашем запросе "SELECT name, data1 ..." ... "GROUP BY data1", отсутствует группировка по имени, хотя по правилам она требуется, раз перечислено в селекте... но SQLite не считает это ошибкой и похоже берёт "первое" значение у даты ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 17:00 |
|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
VSVLADВ вашем запросе "SELECT name, data1 ..." ... "GROUP BY data1", отсутствует группировка по имени, хотя по правилам она требуется, раз перечислено в селекте... но SQLite не считает это ошибкой и похоже берёт "первое" значение у даты Первую часть буду "вкуривать" уже видимо завтра на свежую голову, но по этой части не понял. Там же есть группировка и по name, и по date1. Правильно я понял, что у Вас логика примерно такая же, как у меня. Тоже отдельно смотрим показатели по дням и именам, отдельно по сумме по дням, потом берем максимум от первого и связываем по дате со вторым для получения нужного значения для вычисления пропорции? Я честно говоря давно не брал в руки скул, но уж очень смущает количество "похожих" конструкций. Так и хочется, вспоминая алгебру логик, как-то упростить это выражение.... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 21:40 |
|
Запрос на вычисление процента
|
|||
---|---|---|---|
#18+
gammarayЯ честно говоря давно не брал в руки скул, но уж очень смущает количество "похожих" конструкций.Для этого и придуман синтаксис WITH. gammarayТак и хочется, вспоминая алгебру логик, как-то упростить это выражение....Надо не алегбру логики вспоминать а реляционную алгебру. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 23:00 |
|
|
start [/forum/topic.php?fid=54&fpage=5&tid=2008506]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
427ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 772ms |
0 / 0 |