- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
SELECT AVG(sell)
FROM table_name
WHERE id IN (
SELECT id
FROM table_name
WHERE /* тут какое-то большое условие */
ORDER BY day
)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−29
SELECT AVG(sell)
FROM table_name
WHERE id IN (
SELECT id
FROM table_name
WHERE /* тут какое-то большое условие */
ORDER BY day
)
Настоящий индус
wvxvw 30.05.2016 11:53 # +21
kegdan 30.05.2016 12:04 # +16
defecate-plusplus 30.05.2016 12:16 # +16
оракловый оптимизатор и не такое говно преобразовывал к правильному плану выполнения
если же это мускул, то программист соответствует своей как они говорят субд
kegdan 30.05.2016 12:17 # +16
defecate-plusplus 30.05.2016 12:32 # +16
порядок айдишников ни на что не повлияет нигде (хотя и есть шанс проффессионалы mysql сейчас набегут и скажут, что нет, не всё так однозначно)
нормальная субд выкинет к ебеням и ордер, и подзапрос
обратится к таблице ровно один раз и посчитает среднее
kegdan 30.05.2016 12:36 # +16
Ясен пень, что в человеческих СУБД есть защита от макак, но блин, хоть одну книжку то нужно почитать по Sql прежде чем садиться за запросы
inkanus-gray 30.05.2016 13:03 # +16
В MySQL порядок айдишников из подзапроса сохраняется. В MariaDB добавлен оптимизатор, и ордер бай из подзапроса ни на что не влияет. Очень весело, когда на проекте резко меняется СУБД: говнокод, заточенный под оригинальную MySQL, на MariaDB внезапно начинает выдавать неупорядоченные результаты (там даже в документации написано, что полагаться на сохранение порядка из подзапроса — UB).
defecate-plusplus 30.05.2016 13:20 # +16
есть случаи, когда порядок в подзапросе движок обязан сохранить и довести до запроса уровнем выше: (хотя подобную поебень можно переписать и в row_number() over...)
guesto 30.05.2016 14:51 # −21
naxoM 30.05.2016 15:12 # +16
guesto 30.05.2016 16:32 # −29
naxoM 30.05.2016 16:44 # +15
Dummy00001 30.05.2016 17:00 # +15
из моего личного (ограниченого) опыта: народ такое пишет потому что вложеный запрос пишется/дебажится отдельно, и только потому копи-пастится в нужные места. (по крайней мере на оракле с PL/SQL его приходилось в лоб копипастить потому что по другому с Pro*C без граблей не работало.)
defecate-plusplus 30.05.2016 17:36 # +17
только это допустимо у тебя в воркшите, который ты в течение дня используешь как консоль для одноразовых запросов
а в продакшене это увидеть - как по весне в собачье говно наступить
Dummy00001 30.05.2016 17:49 # +15
в теории - да. в практике...
большая проблема крупных проектов, это что бы выборки консистентное подмножество данных выбирали. и если у тебя нет другого способа это выборки между запросами разными шарить, то приходится извращатся. в общем случае view & SP помогают, но там то же какие-то грабли с ними в оракле были.
простой пример который я помню, это параметризация выборки: выбор по дате/без даты и/или выбор по статусу/без статуса. на каждую комбинацию, своя оптимальная выборка, и только кусок where можно шарить. но единственный способ шарить c SQL - это глупая копипаста.
guesto 30.05.2016 17:55 # −40
Ну то-есть писать на хорошем DSL с DRY, а потом скриптом компилировать его в тонны унылого SQL?
Dummy00001 30.05.2016 18:12 # +15
guesto 30.05.2016 18:13 # −47
На подобии Hibernate.
Dummy00001 30.05.2016 18:16 # +14
guesto 30.05.2016 18:19 # −40
а у Вас что за ЯП?
Dummy00001 30.05.2016 18:30 # +14
guesto 30.05.2016 18:32 # −19
defecate-plusplus 30.05.2016 18:49 # +15
наверное, вот - https://github.com/rbock/sqlpp11/wiki
я хз как работает
ORM на крестах, где вместо аннотаций и АОП можно только яйца кочергой себе почесать, ваще грозно звучит
guesto 30.05.2016 19:02 # −41
Всё таки кресты берут наверное для перформанса, либо если нет API на более высокоуровневых ЯП.
Ни то ни другое не про ORM.
Shamill 13.08.2016 05:49 # −23
3_l4dar 13.08.2016 13:05 # −25
SeniorShaurman 30.05.2016 13:55 # +14