|
Задача SQL
|
|||
---|---|---|---|
#18+
Всем привет помогите написать запрос , сломал голову уже( во вложении задание , не могу вывести "Кол-во проданных товаров оффлайн", "Сумма проданных товаров оффлайн","Кол-во отмененных товаров онлайн" , "Сумма отмененных товаров онлайн" Решил делать отдельно каждую таблицу ,потом совместить , но не получается вывести вышеперечисленные поля: select t1.id_delivery as "№ поставки", count(distinct t1.id_agent) as "Кол-во агентов оффлайн" , count (t1.is_agent) as "Кол-во отгруже тов оффлай" , count (t1.is_util) as "Кол-во утилиз товаров оффлайн" from tab2 t1 group by t1.id_delivery ; select count(distinct t3.id_agent) as "Кол-во агентов онлайн" , count(t3.id_type) as "Кол-во проданных тов онлайн", sum(t3.amount) as "Сумма проданных товаров онлайн" --count( t4.id_type) as "Кол-во отмен товаров онлайн" from tab3 t3 /*, tab3 t4*/ where /*t3.id_delivery=t4.id_delivery and*/ t3.id_type = 1 --and t4.id_type = 2 --(select count(tt.id_type) from tab3 tt where tt.id_type = 2 ) --group by t3.id_delivery ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 11:52 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
vasiliy89, ни кто не хочет погружаться в твои задачи, у всех свои дела. Сделай нормально постановку, вот пример, как надо https://www.sql.ru/forum/1313180/pyatnichnyy-zaprosik ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 12:06 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Мне было не жалко 10 минут, заготовку сделал. Дальше сами поработайте. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 12:13 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
dmdmdm, да я не из вредности )) «Правильно заданный вопрос – половина ответа»(с) https://habr.com/ru/post/81046/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 12:32 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
Передайте им, что они поступают не очень этично, отзывая офферы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 13:07 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
https://www.sql.ru/forum/1288307/vakansiya-otchetnost-moskva Вот это они, как раз это задание и высылали. Вот мой вариант решения: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
автор>>Решение на проходной балл, есть ошибки в результатах. Так же мне скинули решение, которое они считают близким к идеальному. Под ошибками подразумевалось то, что я не сделал роллап по дистинкт каунту ;D ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 13:30 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Когда пришлют ответом своё решение, скажи что в итоговой строке они выводят. Интересно, исправились они или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 13:46 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
vasiliy89, вот им. Они и мне это задание высылали. Dshedoo https://www.sql.ru/forum/1288307/vakansiya-otchetnost-moskva Вот это они, как раз это задание и высылали. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 14:01 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
slow brain, Предыдущий кандидат целый год продержался)) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 14:31 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
slow brainПередайте им, что они поступают не очень этично, отзывая офферы. зато правильно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 15:07 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
кит северных морей count(distinct id_agent_offline) count_agent_offline, count(distinct decode(is_agent, 'y', id_trade_offline)) count_ship, count(distinct decode(is_util, 'y', id_trade_offline)) count_util, count(distinct case when is_agent = 'y' and IS_util is null then ID_trade_offline end) count_sell, count(distinct ID_agent_online) count_agent_online, group by rollup(id_delivery); Вот о чём я и говорил. Роллап по дистинкту даст в результате число от max до sum вышестоящих данных, что имеет практическую пользу равную нулю. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 15:54 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Dshedoo, имеет это практическую пользу, или нет, но неправильный роллап - это только первая ошибка в вашем запросе. вторая - то что вы не сделали FULL JOIN (раз уж вы вообще взялись делать джоин). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 16:13 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
кит северных морейDshedoo, имеет это практическую пользу, или нет, но неправильный роллап - это только первая ошибка в вашем запросе. вторая - то что вы не сделали FULL JOIN (раз уж вы вообще взялись делать джоин). Итоговая строка - это всё таки подведение итогов вышестоящих данных, а не коня в вакууме. Фулл джоин излишен, исходя из задания. З.Ы. в "правильном" решении, там тоже не юзается фулл. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 16:32 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
DshedooИтоговая строка - это всё таки подведение итогов вышестоящих данных, а не коня в вакууме. все верно. я посчитал общее число агентов, совершивших офлайн-продажи, и общее число фактов офлайн-продаж. что именно посчитали вы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 16:49 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
DshedooЗ.Ы. в "правильном" решении, там тоже не юзается фулл. допустим. но вы, как опытный специалист, рассуждающий о практической пользе, могли бы подумать: "хмм, мое решение предполагает, что в каждой поставке должно быть как минимум по одной онлайн и офлайн продаже, иначе эта поставка просто не попадет в отчёт... что-то тут не так" ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 16:54 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
кит северных морейDshedooИтоговая строка - это всё таки подведение итогов вышестоящих данных, а не коня в вакууме. все верно. я посчитал общее число агентов, совершивших офлайн-продажи, и общее число фактов офлайн-продаж. что именно посчитали вы? А я вывел итоговую строку. Итоговая строка - это результат агрегирования вышестоящих данных. У вас есть набор данных, которые вы агрегируете, а потом делаете агрегацию агрегированных данных и получаете итоговую строку, так? Роллап агрегирует изначальные данные, присваивая полю нулл. И это прокатывает во всех случаях, за исключением агрегации distincta. кит северных морейDshedooЗ.Ы. в "правильном" решении, там тоже не юзается фулл. допустим. но вы, как опытный специалист, рассуждающий о практической пользе, могли бы подумать: "хмм, мое решение предполагает, что в каждой поставке должно быть как минимум по одной онлайн и офлайн продаже, иначе эта поставка просто не попадет в отчёт... что-то тут не так" По той же причине, почему вы не написали where id_agent in (1,2). Ведь ваше же решение предполагает выводить все данные из таблиц, а просят вернуть только 1 и 2 id_agent. Потому что это просто излишне, исходя из задания. З.Ы. хватит уже высасывать из пальца, ещё скажите что на нулл надо было проверять каждое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 18:24 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Dshedooкит северных морейя посчитал общее число агентов, совершивших офлайн-продажи, и общее число фактов офлайн-продаж. что именно посчитали вы? А я вывел итоговую строку. Итоговая строка - это результат агрегирования вышестоящих данных. Гм... "И ты прав" (с) Однако, судя по Dshedooавтор>>Решение на проходной балл, есть ошибки в результатах. Так же мне скинули решение, которое они считают близким к идеальному. Под ошибками подразумевалось то, что я не сделал роллап по дистинкт каунту ;D постановщик имел ввиду агрегацию, отличную от суммирования строк отчета. В самом деле, пусть зарегистрирована сотня агентов, но реально работает только один. Должен ли результат в итоге по полю "количество уникальных агентов" выдать "100500" как резульлтат суммирования единички из всех строк отчета? А что эта цифра будет означать в практическом плане? В конкретной постановке нарвал (не не белуха же :) выглядит заметно более правым. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 18:51 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
DshedooУ вас есть набор данных, которые вы агрегируете, а потом делаете агрегацию агрегированных данных и получаете итоговую строку, так? нет, не так. group by rollup(column) - это, грубо говоря, Код: plsql 1. 2. 3.
разницу между написанным выше и avg(avg(value)) надо объяснять? DshedooПотому что это просто излишне, исходя из задания. З.Ы. хватит уже высасывать из пальца, ещё скажите что на нулл надо было проверять каждое поле. да ради бога. повторяйте себе это почаще. это вы не можете тестовое задание на сотку в месяц решить, не я. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 18:52 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
andrey_anonymousДолжен ли результат в итоге по полю "количество уникальных агентов" выдать "100500" как резульлтат суммирования единички из всех строк отчета? Именно так, потому что мы выводим "ИТОГО" для данных, а не общее кол-во уникальных агентов. А есть у нас в будут в продажах сотни строк с кол-вом 1-5, а в "итого" выводится 94, то это правильнее? Или пару миллионов строк, с "2" в итого. Я к тому, что при таком подходе данные в итоговой строке никак не связаны с вышестоящими данными, поэтому выводить их как "ИТОГО" некорректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2019, 08:45 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Dshedoo, вы итого по средним величинам как считать будете? как сумму средних? или как среднее от средних? какой у полученного результата будет практический смысл, кроме того, что он "итого для вышестоящих данных"? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2019, 09:43 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
кит северных морейDshedoo, вы итого по средним величинам как считать будете? как сумму средних? или как среднее от средних? какой у полученного результата будет практический смысл, кроме того, что он "итого для вышестоящих данных"? Точно так же, как считает avg() - соотношение суммы к кол-ву. Только если мы берём не агрегированные данные, то там 1 строка соответствует 1 кол-ву, а в агрегированных данных уже 1 строка не соответствует 1 кол-ву. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2019, 10:00 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Dshedooandrey_anonymousДолжен ли результат в итоге по полю "количество уникальных агентов" выдать "100500" как резульлтат суммирования единички из всех строк отчета? Именно так, потому что мы выводим "ИТОГО" для данных, а не общее кол-во уникальных агентов. Ну и напрасно. Потому что: - строка "ИГОГО" не обязана быть СУММОЙ строк отчета. Да, чаще всего именно так. Но не всегда. - любая цифра в отчете должна иметь практический смысл, заявлянный в шапке отчета. В частности, в варианте период количество активных агентов количество операций...май 10 800июнь 8 300...по году 11 1100 число 11 будет иметь реальный практический смысл в отличие от 18 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2019, 11:19 |
|
Задача SQL
|
|||
---|---|---|---|
#18+
Dshedoo Код: plsql 1.
Ну вот видите, и в Вашем варианте среднее по отчету - не среднее по строкам отчета, а средневзвешенное, т.е. соответствует avg(вся выборка) и не может быть проверено на основе данных отчета, если в выходной форме отсутствует "x". Таким образом Вы дезавуировали собственное утверждение. Полагаю, на этом увлекательную дискуссию можно завершать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2019, 11:24 |
|
|
start [/forum/topic.php?fid=52&msg=39846592&tid=1882207]: |
0ms |
get settings: |
13ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 255ms |
total: | 415ms |
0 / 0 |