|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Доброго времени всем. Имеем продукт, структуру поменять нельзя. Данные поменять нельзя . Есть права только на выполнение select . При больших бы правах выкрутился, но тут что-то не могу решить задачку. Код: 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. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
Сервер mysql-server 5.5.55-0+deb8u1. На выходе надо получить следующий вид projects.name AS project_name, runs.name AS run_name, runs.passed_count, runs.failed_count, runs.untested_count, runs.blocked_count, user.name AS user_name, количество дефектов Если до projects.name AS project_name, runs.name AS run_name, runs.passed_count, runs.failed_count, runs.untested_count, runs.blocked_count всё легко и вяжется обычным join по is, то с дефектами возникла проблема. Подскажите, как посчитать, сколько ошибок завл пользователь в каждом прогоне. Заранее низкий поклон. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 12:31 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Glad_r На выходе надо получить следующий вид ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 13:23 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Блин, трудно было проверить скрипты на работоспособность? ляп на ляпе... Вот fiddle . Добавьте связи, и запрос, который получает все данные без обработок и группировок, одной плоской таблицей. Убедитесь, что работает. Выложите обновлённую ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 13:38 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Akina Блин, трудно было проверить скрипты на работоспособность? ляп на ляпе... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 13:41 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Akina, Gluck99 спасибо за отклик и критику. Честно не знал про такие возможности, что можно сразу вставлять и отлаживать данные. Сохранил в заметках. Akina, как просили, добавил вывод результата, в том виде, что я ожидаю. https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e0fda063af7959f5fc2d03d5d1957400 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 14:08 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Glad_r , я же специально просил: Akina Добавьте связи, и запрос, который получает все данные без обработок и группировок, одной плоской таблицей. Воссоздавать связи по комментариям - дохлое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 15:29 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Akina, в самой базе таблицы не как не связаны, в чистом виде (relation) нет связи. Могу чисто со своих комментариев вынести связи ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 15:55 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Хрен с ими, связями. Дайте запрос, который связывает ВСЕ таблицы в одну большую, и при этом ничего не теряет. Просто связи-то, похоже, избыточные - и при этом потенциально противоречивые... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 21:08 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Akina, Первая часть Код: sql 1. 2. 3.
К ней остётся добавить сумму дефектов, но там как раз проблема из-за множественных связей. Если бы defects через left join был связан с tests, тогда tests.tested_by=user.id, tests.run_id=runs.id. Но остаются те дефекты, которые не свяжутся. И тут как раз нужна помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 10:56 |
|
Сложная выборка, не подпадающая под какой-либо join
|
|||
---|---|---|---|
#18+
Вы странный. Только Вы обладаете сведениями о том, где что с чем связано. Где связь, а где просто переопределённые данные. Пока из всего этого вылезает, похоже, такая логика: Есть проекты. Таблица projects. В каждом проекте есть несколько прогонов (тестов). Таблица runs, связанная с projects. Пока всё гладко. А вот дальше... Чисто в теории - дальше должны идти отдельные тесты. Таблица tests. Тут всё понятно, кроме странного поля case_id (идентификатор оригинального теста), которое на что-то ссылается, но на что? Ладно, хрен с им, идём чисто по равенству значений, а там куда-то вылезем. Вяжем тесты к прогонам. JOIN tests t ON t.run_id = r.id Дальше. Если брести по значениям, то видно, что к таблице тестов привязывается таблица дефектов. Логика уже спряталась далеко и надёжно, поэтому тупо бредём за значениями. JOIN defects d ON t.case_id = d.case_id Ну и осталась таблица изменения статусов test_changes, которая, опять же судя по значениями, связана с таблицей дефектов через поле test_change_id. Пишем, вообще не думая. JOIN test_changes c ON c.id = d.test_change_id Поскольку тесты, их изменения, и дефекты, если судить по данным, могут отсутствовать в отдельных прогонах, последние три связи делаем левыми, и по совокупности имеем Код: sql 1. 2. 3. 4. 5.
Ну и добавляем юзеров. Поскольку юзер присутствует как в tests, так и в test_changes, придётся связывать две копии таблицы юзеров. Добавляем и получаем Код: sql 1. 2. 3. 4. 5. 6. 7.
Если всё это запустить с SELECT * , то получится 6 записей. fiddle . Нам же нужны только три, то есть размножившиеся записи придётся "схлопывать" группировкой. Для того, чтобы сделать это правильно (вернее, чтобы после группировки, которая достаточно очевидна, правильно получить агрегированные поля) надо понять: 1) Какой из двух user_name нужен. 2) Как именно получено значение defect_count. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2020, 18:56 |
|
|
start [/forum/topic.php?fid=47&fpage=21&tid=1828552]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 24ms |
total: | 168ms |
0 / 0 |