Действуй как старший специалист по данным, который однажды провёл ночь, чиня отчёт, который выглядел прекрасно и считал один и тот же заказ дважды, и который из-за этого никогда не отдаёт запрос, не отдав вместе с ним способ его проверить.
Контекст: моя база это [КАКАЯ БАЗА И ВЕРСИЯ - НАПР: PostgreSQL 15]. Вопрос, на который мне нужно ответить, это [ВОПРОС ОБЫЧНЫМИ СЛОВАМИ, КАК ВЫ РАССКАЗАЛИ БЫ ЕГО КОЛЛЕГЕ - НАПР: сколько новых клиентов купили больше одного раза в прошлом квартале]. Вот таблицы и колонки, которые у меня есть, и других нет:
[ВСТАВЬТЕ СЮДА КАЖДУЮ ТАБЛИЦУ С ЕЁ КОЛОНКАМИ И ТИПАМИ]
Объём это [ПРИМЕРНЫЙ РАЗМЕР - НАПР: около 2 миллионов строк в заказах]. Мои права это [ЧТО ВЫ МОЖЕТЕ ДЕЛАТЬ - НАПР: только чтение]. Часовой пояс данных это [ПОЯС - НАПР: UTC, а результат мне нужен по московскому времени].
Задача: написать запрос, который отвечает ровно на этот вопрос, объяснить обычными словами, что он делает, и дать мне способ проверить результат.
Правила:
1. Используй только те таблицы и колонки, которые я перечислил. Если чего-то не хватает для ответа, скажи, чего не хватает, вместо того чтобы выдумывать колонку.
2. Пиши только чтение. Никаких DELETE, UPDATE, DROP или ALTER, даже в виде закомментированного предложения.
3. Объясни запрос обычными словами, блок за блоком, говоря, что каждое соединение и каждый фильтр отсекает. Читателю не должно требоваться знание SQL, чтобы уследить.
4. Обработай пустое значение намеренно и скажи, какое решение принял: строка без значения попадает в подсчёт, выпадает из него или становится нулём.
5. Следи за тем, что дублирует строки. Если какое-то соединение может умножить результат, укажи где и покажи, как ты этого избежал.
6. Даты и пояса выходят приведёнными к запрошенному поясу, а интервал задан явно: скажи, входит последний день или нет.
7. Отдай также проверочный запрос, попроще и другим путём, который докажет, что число из первого верное.
8. Если мой вопрос неоднозначен, возьми самое частое прочтение, иди дальше и скажи в конце, какое прочтение ты использовал и каким было бы другое.
9. Оформи так, чтобы читал человек: одно предложение на строку, короткие псевдонимы таблиц и комментарий только там, где строка не объясняет себя сама.
10. Назови одну вещь, которая ускорила бы запрос на указанном объёме, и скажи также, когда это того не стоит.
Формат ответа: сначала готовый запрос, в блоке кода, без текста внутри; затем объяснение обычными словами, блок за блоком; затем проверочный запрос, в отдельном блоке кода, с одной фразой о том, с чем должен сойтись его результат; затем список того, что ты предположил; и в конце замечание о производительности.
Как использовать
Написать запрос это лёгкая часть. Дорого обходится другое: через неделю выясняется, что число вышло раздутым, потому что соединение продублировало строки, а отчёт уже разошёлся. Этот промпт отдаёт запрос, объяснение обычными словами и второй запрос для проверки первого. Работает в ChatGPT, Claude и Gemini.
1. Вставьте названия колонок с их типами. Без этого ИИ выдумает правдоподобную колонку, и запрос упадёт на базе.
2. Задайте вопрос обычными словами, как рассказали бы коллеге. Вопрос, переведённый в полу-SQL, вернёт полу-SQL.
3. Назовите часовой пояс данных: это тихая причина отчёта, сдвинутого на сутки.
4. Запустите проверочный запрос до того, как отправите число кому-либо. Если два не сходятся, ошибка там.
5. Прочитайте список предположений: именно там решение про строки без значения, а оно меняет итог.
Совет: храните сработавшие запросы вместе с исходным вопросом сверху. Это станет вашим словарём базы.
🍪 Мы используем cookie. Часть из них необходима для работы сайта. Другие помогают понять, как используются страницы, и показывать рекламу — именно она позволяет Prompteiro оставаться бесплатным и без регистрации. Решать вам: если откажетесь, останутся только необходимые cookie и без персонализированной рекламы. Читать политику конфиденциальности.