Очередной баз данных тред, в котором мы -Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания -Разбираемся, почему PostgreSQL - не Oracle -Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс -Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обещстве -Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование -Анализируем, как работает поиск вконтакте -Игнорируем конкаренси-шизика, не понимающего, зачем базы данных нужны -И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
Есть простые и готовые решения по натягиванию ЮЗЕР ФРЕНДЛИ интерфейса на определенные таблицы? Для добавления строк и редактирования существующих. Чтобы ещё можно было настроить доступ, какие столбцы можно редактировать. Типа редактора в pgadmin, но для ОПЕРАТОРА ЭВМ. Проще и меньше свободы. Не хочу делать лишнюю работу по созданию редактора таблиц, если есть что-то подходящее.
>>1782285 так и не делай, лол. Используй google spreadsheets. Данные в программу закачивай через веб в виде csv. Результаты тоже через api в гугл-таблицы выдавай.
>>1783556 с того самого момента как функции ДБА может выполняет любой нетупой программист? с того самого момента, как государственное ИТ,где смотрели бы на сертификаты, стало скопищем долбоебов, а деньги платят лишь на зарубежных галерах?
Оптимизаторы, что будет эффективнее в постгрес? 1 вариант) Таблица A: столбец id инт, столбец b_id - массив интов. Таблица b: столбец id int. Нужно поджоинить по элементам массива b_id таблицу b по индексам.
2 вариант) Таблица А, таблица Б: столбец id - инт. таблица С: столбец a_id int, столбец b_id int. Ну и через таблицу С джоиним таблицу Б.
Массив интов не меняется, как и таблица С. Что думаете по этому поводу и почему? Замеры провести не получается =(. Не умею я это делать
Как реализовать одним запросом подсчет однородных данных (цены) по интервалу (5000)? Т.е. сделать select с разбивкой на этот интервал на всю таблицу (до 5000; 5000-10000; 10000-15000...) Я не работал с SQL ранее. Пожалуйста помогите.
>>1787717 или делить на 5000 и смотреть целую часть, и на основании этого ставить метку. Смотря что там в исходных данных и какой конкретно результат нужен.
Нужен ли в каждой таблице столбец id, выполняющий исключительно роль первичного ключа, если эту роль может выполнять столбец реальных данных? На stackoverflow топовый ответ — нужны. Я вот думаю, что это ухудшает читаемость, больше запутанности, сложнее писать всякие джоины, длиннее запросы. С другой стороны, подобие юнификации. Ну и без id порядок вставки теряется — наверное, единственная потеря информации. А что думают пацаны с двача?
>>1787787 В новой таблице intervals_table делаешь два столбца start_interval и end_interval, заполняешь интервалами. Потом select * from prices_table join intervals_table on prices_table.price between intervals_table.start_interval and intervals_table.end_interval order by prices_table.price.
>>1787781 Делаю первичные ключи любого типа, и даже многоколоночные. Большинство таблиц не-связок конечно всё-таки с числовым id, потому что в данных нет уникальности. Но там где можно, почему нет? Нахуя ещё одна колонка с индексом? Это очевидное васянство из разряда обязательной аббревиатуры типа в названии колонки.
Добавлю, что числовой id может работать быстрее в джойнах. Первичный ключ следует выбрать таким, чтобы все внешние ключи на него ссылающиеся, занимали поменьше байт и соответственно легче проворачивались в оперативке. А если у тебя табличка такая, что никто на неё не ссылается, допустим токены какие-нибудь, то можно смело забить хуй и сделать строку с токеном первичным ключом.
Вот к чему пристаковерфловил: SELECT 5000 ( priceAmount / 5000 ) AS start_range, 5000 ( priceAmount / 5000 ) + 5000 AS end_range, count(*) AS COUNT FROM price GROUP BY priceAmount / 5000
Оно считает группы, но завязано на наличие существующих цен. Поэтому если не будет цен в промежутке определенном, то он не будет создавать этот промежуток в результирующей таблице и ставить ему 0 в подсчете вхождений.
Я ведь правильно понимаю, что это человеку понятно, если диапазон пустой, то там нет вхождений, а вот роботу это будет непонятно, т.к. он должен обрабатывать подряд все статистические данные? И придется создавать костыли потом, если понадобится считать пустые интервалы (хотя я хз, что там будет потом и какая хотелка будет). Какая логика считается правильной - больше данных это нормально или не париться о пропущенных значениях?
По поводу создания временной таблицы интервалов: Я не понял как это делать (пытаяюсь вызвать хоть что-то, ругается на селект из #таблицы, хотя она и считается созданной нормально), но придерживаюсь такой логики, что ее нужно заполнять для СТАРТовых от нуля + 5000, а для КОНЕЧных от 5000 + 5000 и заканчивать таблицу на максимальном значении цены + 5000 , которое есть в таблице с ценами.
Руками такую таблицу интервалов заполнять не вариант, а как вот это все вышеописанное зациклить хз.
>>1788701 DROP TABLE #tmp CREATE TABLE #tmp (ID INT IDENTITY(1,1),value_current int,value_next int)
DECLARE @step int set @step=5000
WHILE @step < 9000000 BEGIN
INSERT INTO #tmp (value_current,value_next) VALUES (@step,@step+5000) set @step=@step+5000
END;
SELECT * FROM #tmp
Ну тут временная таблица, а себе генирируй постоянную. С другой стороны там записей ты всего пару тыщ лол не думаю что твоя шарага яхтами торгует, и временной хватит. Как джоинить анон выше уже писал. Если нужны пустые интервал делаешь левое соединение.
>>1788701 Кстати вот хороший вариант без всяких временных таблиц.
Select Range as [Score Range], Count(*) as [Number of Occurences] from Ranges r inner join Scores s on s.Score between r.LowerLimit and r.UpperLimit group by Range
Сап. Я вкатываюсь в джанго, отдельно sql не изучал, только поверхностно. Ну вот, создаю я бд для хранения бронирований в гостинице. В ней должны быть данные о клиенте (фио, емейл, телефон итд), дата его заселения, дата выезда, где он забронировался (сайт отеля, букинг итд), категория номера и цена. Я правильно понимаю, что у меня будет одна основная таблица со всем этим, но повторяющиеся данные вынесены в другие таблицы и связаны с основной через foreign key? То есть все данные о клиенте будут в таблице "клиенты" и в основной будет просто id из той. Источник брони и категории тоже. Но вот до меня не очень допирает, а как собственно делаются запросы к таким бд? Вот если мне нужно вывести все данные о брони, что нужно прописать, чтоб взялись данные из таблиц, связанных внешними ключами? Я прост не знаю как загуглить, сорян, наверное тупой вопрос конечно.
Что-то не врубаюсь как именно работают AND и OR внутри JOIN-а
Вот есть у нас что-то вроде: SELECT op_entries., op_entries_status. FROM op_entries LEFT OUTER JOIN op_entries_status ON op_entries.id = op_entries_status.op_id AND op_entries_status.order_id = 3
Я понимаю когда условие ON одно, что-то типо "ON table_1.id == table_2.key" но что означают эти AND и в особенности OR?
>>1789736 ? Я с БД знакомился лишь год назад в универе, сейчас приперло разобраться почему некоторые query возвращают пустой результат. Что такого-то? Ты что ли сам с пеленок SQL ебашить начал?
>>1789746 >>1789754 Хм, логично А OR сюда как вписывается? SELECT table_1.name from table_1 JOIN table 2 ON table_1.address == 10 OR table_2.session == 4 Мы создадим JOIN со строками где выполняется одно (или оба) из этих условий?
>>1789743 Зашквар спрашивать элементарные вещи по базовым дисциплинам. Просто берешь и читаешь учебник. Там все ответы. Sql - это абсолютно необходимое знание айтишника.
>>1789743 Так у тебя наитупейший вопрос, по простой бинарной логике. Если ты неспособен понять таких вещей или экстраполировать их на другую область, то лучше иди копай ямы или принтеры носи.
Таблица в которую пишутся результаты распознавания имеет еще 2 колонки - foreign key с таблицами: Project (пик 1) Server (пик 2)
Нужно составить sql запрос, который выведет: дату(можно задать промежуток дат), результат распознавания (АО, человек, положительно-отрицательно), далее для каждого результата распознавания: кол-во за каждую дату (если указан промежуток), длительность всех аудио, проект и сервер.
>>1794058 Типа разные СУБД вообще. Если тебя конкретно запросы интересуют, а не внутрянка, то базовый SQL по спеке везде плюс-минус одинаковый, отличаются специфическими функциями. Работа со строками, с датами и т.д. А вот если тебе нужно погромирование и SP, то тут кардинальные отличие начинается, погугли как выглядит pl-sql (oracle) и t-sql (mssql).
Тут есть мамкины DBA? Какое поведение ожидать от 4-х БД вместо 1-ой БД при использованиия MySQL 5.7 Community? Нагрузка распределится или наоборот возрастет на инстанс mysqld?
У меня есть массив id, id автоинкрементится и уникален. Надо найти все записи с этими id в таблице. Select * where id in array пройдется по всем записям, даже если нужно всего 3, например? Как вытащить таргетно каждую запись за 1 запрос?
>>1795816 Если id у тебя ещё и primary key, то для него скорее всего создан индекс. Поэтому обхода всех записей не будет, каждая запись найдётся на O(logN).
>>1796062 Есть application который состоит из нескольких модулей (могут быть запущены или не использоваться). Есть бизнес логика, разделенная в соответствие с задачами. Вот и хочу понять, есть резон все в одной схеме ебашть и засирать таблицами, которые могут быть просто мертвым грузом или же разделить на схемы в соответствие с модулями приложения) проще говорят модули: A, B,C,D И будет соответственно 4 БД на одном сервере: A_DB, B_DB, C_DB, D_DB. Проще будет дампы делать по идее и управлять правами.
Как получить среднее кол-во чеков по дням недели? Это для кол-во работает Select count(distinct(чек) as кол-во чек from t1 where = месяц По логике я должен просто сделать так Select AVG(count(distinct(чек)) as кол-во чек from t1 where = месяц Или select avg(Select count(distinct(чек) as кол-во чек from t1 where = месяц) as GGG from t1 Хэлп ми
>>1797962 >>1797928 Кол-во чек подсчитывается как сумма уникальных значений count(distinct № чек). Теперь мне нужно сделать как среднее количество чеков за день недели. Например среднее кол-во чеков за все понедельники месяца 228, дальше среднее кол-во чеков за все понедельники месяца разбивка на магазины в первом 226 во втором 229 в третьем 250 и тд.
>>1797985 Я бы хотел сделать это все одним запросом, но как тупое решение нахожу создании новой таблицы в которой будет хранится кол-во чеков за период
>>1797991 with govno as ( SELECT Дата , COUNT(DISTINCT Чек) as Zalupa FROM GOVNO GROUP BY Дата )
SELECT z.Месяц, z.Дата,z.ДеньНедели, AVG(Zalupa) as Zalupa FROM GOVNO as g inner join ТАБЛИЦА_КАЛЕНДАЯ as z on g.Дата=z.Дата group by z.Месяц, z.Дата,z.ДеньНедели
Пиздос, открыл для себя блокировки строк при апдейтах. Оказывается можно схватить дедлок всего лишь с помощью транзакций и простых UPDATE, даже без субквери. Даже на классическом примере списали со счёта одного клиента, закинули на счёт другому.
Как бэкапить базу mysql? mysqldump бэкап заливается на чистую базу уже больше суток. Если на проде всё упадёт - это не вариант. Может снапшоты файловой системы? А если текущая фс не умеет в снапшоты? Как делают взрослые дяди, если ресурсов на репликацию нет?
Есть один сайт с кучей продуктов. Когда вася покупает один из них - на почту ему приходит doc/pdf-презентация, релевантная купленному продукту, коих довольно много и будет больше. Суть: сделать в таблице с продуктами поле, по содержимому которого можно будет однозначно доставать нужный файл. Причём сделать чтобы было не как говно и при этом без всяких сложностей типа отдельных сервисов, которые будут отдавать эти презентации для своих, и прочей ебалы. Можно было бы хранить base64 или file:///ссылками прямо в базе, но какое-то внутреннее чутьё меня останавливает. Вместо базы mysql 8.0, если вдруг это важно.
>>1798517 > сколько бд вести? База около 25 гигов. Миллиарды записей. Но на то она и база ведь. Мог и в блокнотик записывать, коль так сложно это всё. 21 век на дворе. Видимо где-то я что-то не не так делаю. >>1798517 >Покажи запрос бекапа\востановления mysqldump --all-databases --compact --single-transaction -u root -p xxxxxxxxxxxxxxxx > bkp.sql его потом в другую базу: mysql -f -uroot -p < bkp.sql И висит уже больше суток. Пара ошибок в процессе вылезло по датам, но ничего серьезного. Это же не дело.
>>1799251 Была пуста, сначала ещё --no-data залил с созданием таблиц, потом фулл дамп. Вопрос вобщем-то не в этом, а в том, можно ли как-то не тупыми запросами в базу её бэкапить (честно, видится это как самый идиотский способ, который только можно придумать), а бэкапить одним куском, бинарно, то, на чём она лежит, или типа того? Может в том же разделе создать файл с виртуальным разделом, например в btrfs и среплицировать в него, а оттуда уже снапшотом куда угодно... Что-то мне подсказывает, что давно есть много полезных опенсорсных утилит на эту тему.
>>1781628 (OP) Есть набор Отделов (каждый Отдел представлен своей таблицей), к каждом Отделу приписаны Сотрудники (с помощью Foreigh Key), для каждого отдела надо сделать "таблицу соответствий" по типу id_сотрудника -> приоритет_сотрудника Как это лучше всего намутить? Пока что вижу лишь закинуть поле JSON внутрь Отдела и представить ключи id-шниками Сотрудников и значения - приоритетом
>>1787781 Эдгар Кодд и Кристофер Дэйт как бы говорят, что суррогатный ключ (а это как раз Id исключительно для ключа) - зло. Не совсем с этим согласен, но да, если есть поле, уникальное и неизменяемое со временем, то быть ему ключом. Пример - уникальный код товара. Плохой пример - номер паспорта. А вообще, лучше почитать про нормальные формы, хотя бы про первые три, например тут: https://metanit.com/sql/tutorial/2.2.php, осознать их и уже потом решать, нужен суррогатный ключ или хватит натурального.
Работаю в энтерпрайзе, в проекте около 2к таблиц, есть дб-админы, и почти сука у 90% там где должны быть FK NOT NULL - нихуя нет, более того, эти мрази ставят строки везде куда могут вместо int'ов, вот просто так дебилы решили, откуда такие мрази берутся?
Как меня уже заебало это нытье НУ ТАМ ЖЕ ЕЩЁ ДАТА НЕИЗВЕСТНА, ПОЭТОМУ NULL - пошли нахуй петухи, у них пол базы данных обосрано в NULL.
Хай. Есть один MySQL в котором лежат хранимая процедура и вызывающий ее триггер на INSERT в нужную таблицу. Верно ли я понимаю, что при выполнении: INSERT INTO таблица () VALUES (); триггер сработает на каждую вставляемую строку, а не единожды в конце этой команды? Если да, можно ли в мускуле добиться поведения триггера как во втором варианте?
>>1781628 (OP) Сап, котики! Прошу помощи. Скорее поставить мне мозги, чем написать за меня запрос хотя запрос с объяснением будет в тему. Есть БД "ШКОЛА" (пилил в oracle developper). (PK) - первичный ключ, (FK) - внешний ключ. Сущности в БД: -classes (классы) [Id (PK), Lvl (название класса 1А, 2Б...), QtyStudents (кол-во учащихся]
-lessons (уроки "занятия") [Id (PK), Lesson_Date, Teacher_Id (FK), Class_Id (FK), Subj_Id (FK), Fullness (посещаемость на этом уроке)]
Только таблица lessons связана с тремя остальными через внешний ключ. Оставшиеся три таблицы между собой не связаны (например teachers не связана напрямую с subjects).
Надо написать запрос, который выводит: фамилию и имя учителя, предмет за месяц, с наименьшей посещаемостью. Т.е. одну строку с наименьшим значением (Fullness/QtyStudents) 100%.
Джва часа рожал, нашел как выбрать минимальный процент. Но, как его обернуть в запрос, чтобы подтянулась фамилия, имя и предмет - не осилил. Плеас, хэлп. Вот этот селект выводит минимальный процент посещаемости: SELECT MIN(100l.Fullness/c.Qty_Students) FROM lessons l JOIN classes c ON (l.Class_Id = c.Id) JOIN teachers t ON (l.teacher_id = t.Id) JOIN subjects s ON (l.Subj_Id = s.Id);
Пытаюсь обернуть вот так: SELECT t.Last_Name, t.First_Name, s.Subj_Name, ( SELECT MIN(prc) FROM (SELECT 100*l.Fullness/c.Qty_Students prc FROM lessons l JOIN classes c ON (l.Class_Id = c.Id) JOIN teachers t ON(l.teacher_id = t.Id) JOIN subjects s ON (l.Subj_Id = s.Id) ) ) FROM lessons l join classes c ON (l.class_id = c.id) JOIN teachers t ON (l.Teacher_Id = t.Id) JOIN subjects s ON (l.Subj_Id = s.Id) WHERE l.Lesson_Date > to_date('2020-11-01', 'YYYY-MM-DD') AND l.Lesson_Date < to_date('2020-11-30', 'YYYY-MM-DD');
Выводит все фамилии, имена, предметы и напротив каждого пишет один и тот же минимальный процент. Типа: Иванов, Иван, Матем, 55% Петров, Петя, Литра, 55% Сычёв, Вася, Русиш, 55%
Есть мнение что задачи нужно решать, собирая данные как пирамидку. Ага смотрим тебе, тебе нужно найти что-то по учителям, делаем селект из учителей. Смотрим не хватает уроков, джоиним уроки и тд.
Соотвественно просто сначала обогащаешь таблицу нужными полями т.е просто джоинишь ВСЕ таблицы. Потом добавляешь вычисляемое поле которое выделает часть месяца из даты, и большую таблицу группируешь по месяцу+учителю, в групировки делаешь наполняемость на количество, или что ты там посчитать хотел.
Насколько хорошо мускуль работает с json-ебаниной? Если я каждый день буду создавать жсон ячейку и писать туда лог объемом в десятки мегабайт, для того чтобы потом брать их и обрабатывать, он не забуксует?
Насколько сильно репликация тормозит мускульного хозяина? Если слэйв на удалённом сервере через интернеты, это вообще законно? Только вкатываюсь в бдшечки...
>>1804392 Я как раз склоняюсь в сторону монги, естественно она будет лучше для таких задач, но накатывать ее на сервер, разбираться, ебаться с ней и перепиливать код под нее - для меня тот еще гемор, потому и спрашиваю, может мускуль тоже неплохо справится с подобным. Короче посмотрю как оно будет работать на мускуле, если накроется медным тазом, придется всё перепердоливать.
>>1804687 Ну ёбана, ты что совсем деревянный? Вычисляемое - ещё одно поле в таблице, которое получено из существующих полей(например стобец2 * стобец2 ). В WHERE только фильтры, новые данные в таблицу ты не добавишь.
>>1804145 >>1804904 >>1804930 Спасибо, няши. Я почти-почти допинал. Сейчас у меня выводятся ФИО, предмет и последний столбец - с минимальной явкой. Но мне теперь нужно, чтобы выводилась только одна строка с минимальным значением в последнем столбце. Прописываю последней строкой having min(yavka);
select t.Last_Name, t.First_Name, s.Subj_Name, min(100*l.Fullness/c.Qty_Students) as yavka from lessons l join classes c on (l.Class_Id = c.Id) join teachers t on (l.teacher_id = t.Id) join subjects s on (l.Subj_Id = s.Id) where l.Lesson_Date > to_date('2020-11-01', 'YYYY-MM-DD') and l.Lesson_Date < to_date('2020-11-30', 'YYYY-MM-DD') group by t.Last_Name, t.First_Name, s.Subj_Name having min(yavka);
Пишет "invalid relational operator"
Но если последнюю строку переписать на сравнение например фамилии с каким-нибудь учителем, то все работает (остается одна строка, но не та, которая мне нужна) having t.Last_Name = 'Ivanov';
>>1804930 > ты что совсем деревянный? Вычисляемое - ещё одно поле.. я просто новенький и пока путаюсь в терминах... "вычисляемое" там или еще какое. уменьшаемое, вычитаемое, слагаемое - помню. Вычислемеое - нет))
>>1805631 GROUP BY не требуется. Как я уже писАл, сортировка и топ 1:
select t.Last_Name, t.First_Name, s.Subj_Name, --min убираем (100l.Fullness/c.Qty_Students) as yavka from lessons l join classes c on (l.Class_Id = c.Id) join teachers t on (l.teacher_id = t.Id) join subjects s on (l.Subj_Id = s.Id) where l.Lesson_Date > to_date('2020-11-01', 'YYYY-MM-DD') and l.Lesson_Date < to_date('2020-11-30', 'YYYY-MM-DD') order by yavka -- сортировка FETCH FIRST ROW ONLY;
Ну а если очень-очень хочется c GROUP BY , то можно так:
select t.Last_Name, t.First_Name, s.Subj_Name, min(100l.Fullness/c.Qty_Students) as yavka from lessons l join classes c on (l.Class_Id = c.Id) join teachers t on (l.teacher_id = t.Id) join subjects s on (l.Subj_Id = s.Id) where l.Lesson_Date > to_date('2020-11-01', 'YYYY-MM-DD') and l.Lesson_Date < to_date('2020-11-30', 'YYYY-MM-DD') group by t.Last_Name, t.First_Name, s.Subj_Name having min(100*l.Fullness/c.Qty_Students) IN ( SELECT MIN(100l.Fullness/c.Qty_Students) FROM lessons l JOIN classes c ON (l.Class_Id = c.Id) JOIN teachers t ON (l.teacher_id = t.Id) JOIN subjects s ON (l.Subj_Id = s.Id) );
>>1804394 Запись лога не тормозит практически. Тормозит фиксация , тк тебе придется включить binlog , а sync_binlog Default Value = 1 Сама репликация : >Replication is asynchronous by default Тоже не должна тормозить на бытовом уровне понимания.
Есть довольно сложная база, в ней имеется таблиц 20. Раз в неделю мы делаем по ней некий отчёт и вьюху, которую требует отдел долбоёбов. Им время от времени не нравится, и они просят переделать/сделать другую вьюху с другими параметрами.
Каждый раз прогонять требуемые запросы - жопоебля, так как один такой запрос будет на нашем ебаном сервере часа два грузиться. Вопрос: существуют ли какие-то тулзы, которые по аналогии с Excel могут интуитивно делать необходимые этому отделу долбоёбов запросы? Или, если нет, как можно решить эту проблему? Была идея напилить свой скрипт на питоне, который будет в соответствии с выбранными столбцами посылать необходимый запрос SQL и возвращать на выходе CSVшник, но пока не очень представляю как это сделать.
Сам Excel не предлагайте, он будет нереально виснуть от объёма базы Также не предлагайте Power BI, уже пробовали, он под такое изза своей сложности тоже не заточен
>>1807340 >Вопрос: существуют ли какие-то тулзы, которые по аналогии с Excel могут интуитивно делать необходимые этому отделу долбоёбов запросы? да. power bi и tableau.
>Power BI, уже пробовали, он под такое изза своей сложности в таком случае может вам всей фирмой нахуй пойти? Вы просто ленивые долбоебы. Это лучше из возможных решений.
>>1807340 >Каждый раз прогонять требуемые запросы - жопоебля, так как один такой запрос будет на нашем ебаном сервере часа два грузиться и че так долго то? Возможно, вам нужна колоночная аналитическая бд. типа clickhouse или vertica. И автоматический процесс доставки данных в нее.
>>1809374 На литкоде нет "бесплатной подписки". Так-то да, он бесплатен, но когда я смотрел последний раз (около месяца назад), почти все вопросы на SQL были под замком.
Есть ли какой-нибудь ресурс где можно посмотреть аналогичные команды для разных СУБД (создание таблиц с разными типами, ограничениями, индексами, вывод информации о таблицах и всё такое), чтоб можно было сравнить и сразу понять в чём различия, а то у одних auto increment, у других auto_increment, у третьих identity(1, 1), и тому подобное.
Подскажите, джойны, если случайно заиграться с переменными binlog_commit_wait_count и binlog_commit_wait_usec, и получится так, что обновления будут сыпаться быстрее, чем диск будет успевать записывать данные, база сама эту ситуацию разрулит или всё развалится?
Анончики, мне дали техническое задание, в котором надо получить выгрузки по ИНН с сайта ФНС. Я пока делаю через selenium на питоне, но, вероятно, можно как-то подключиться к БД ФНС через MySQL какой-нибудь? Для этого надо писать админу сайта и запрашивать логин и пароль к БД? Смогу я потом через SQL-запросы считать excel-файл со списком ИНН и скачать выгрузки из БД, или лучше продолжить делать через питон?
>>1811399 На сайте же можно скачивать выписки, вот я и думал, что можно автоматизировать это через SQL. Ладно, спасибо за ответ, продолжу делать через webdriver.
>>1811457 В условиях задачи явно сказано - номер начинающейся на +7905, если паттерн был в середине, или там плюса не было, другой разговор. А с учётом того что вариант с лефтом более предпочтителен like, и в условиях задачи нам не двусмысленно намекают что его можно использовать. Он блять WHERE написать не может, а если у него спросят В ЧЁМ ПРЕИМУЩЕСТВО LIKE или ЧТО ОЗНАЧАЕТ ПРОЦЕНТ, он просто будет стоят и жидко обтекать.
А потом такие хуесосы как ты на продакшене везде свой ссаный полнотекстовый поиск пихают и удивляются, почему всё так хуёва работает.
Двощ, делаю тестовые, наткнулся на странную формулировку Есть две простенькие таблицы: id,id2 и id2,name Надо вывести id,name двумя способами И тут я сел в лужу ибо не понимаю что это за способы? То есть про join я в курсе, конечно же. А ещё как их объединить можно, через что?
>>1811621 Всратых способов можно много придумать. 1. select id, name from t1, t2 where t1.id2 = t2.id2 -- тоже джоин, но неявный 2. select id, (select name from t2 where t2.id2 = t1.t2) from t1 3. Написать какую-нибудь процедуру, где вложенным циклом проходишься по обеим таблицам и вручную джоинишь.
Как правильно организовать базу с тремя таблицами со связями многие ко многим? База для дискорд бота. В дискорде есть сервера (таблица guild), пользователи (user), роли пользователей на сервере (role). Пик № 1
У сервера может быть много пользователей и ролей. Пользователь может состоять на многих серверах и иметь много ролей. Не могу придумать схему базы. Пока остановился на двух вариантах Первый кажется проще: пик № 2, тут все связи хранятся в одной таблице. Насколько это правильно? Второй кажется логичнее: пик № 3, но чтобы сформировать простой запрос, понадобится вереница из джоинов. Как будет правильнее?
>>1812341 Средний пик - это результат джойна guild_user, guild_role и user_role с третьего.
Второй вариант быстрее (результат джойна уже в готовой таблице) третий займет меньше байтиков под хранение. Но если юзеров у тебя не на терабайт, никакой реальной разницы нет.
Есть одно индусское поделие, регулярно вызывающее в базе предприятие дедлоки. Когда оно хочет присвоить новый порядковый номер счёту или другой писульке, оно, вместо того чтобы пользоваться родным механизмом секвенсов делает так:
select number from отдельная_индусотабличка_с_последними_присвоенными_номерамиFOR UPDATE
Потом соответственно update number=number+1
Как исключить блокировки? Пилить родной секвенс для каждой таблицы, представляющий документ долгий мартышкин труд, их много.
Просто убрать for update - возможное дублирование сгенеренного номера.
Хай гайс , расскажите пожалуйста, что в вакансии значит оптимизация запросов? Что хотят от меня, что читать? Есть статьи годные или поделитесь личным опытом.
Сап двач. Зочем вообще нужен ваш SQL, кроме как ради разогрева климата? Мне кажется, что вы все дармоеды, пока нормальные поцаны архитектурят хайперформанс базы на сырых key-value движках сидите тут и дрочите.
>>1812960 Как думаешь, что сильнее разогреет атмосферу: SQL-запросы или производство огромного количества более ёмких дисков, чтобы вместить всю эту ненормализованную поеботу?
>>1812935 Это значит есть говнозапрос, который работает неприемлимое количество времени, или вообще не отрабатывает, так как требует недопустимое количество ресурсов - ты берешь и переписываешь его так, что он начинает отрабатывать за приемлимое количество времени, или отрабатывать вообще.
По статьям, литературе - начальный уровень это базовые статьи по оптимизации, зачем нужны индексы, какие бывают индексы, когда их стоит и не стоит использовать, какие есть базовые способы доступа к данным в чем их отличия и преимущества, типы джоинов и их алгоритмы, типы объединений, способы аггрегаций, партиционирование/шардирование, способы организации данных на диске (колоночное/строковое) вычислительные сложности перечисленных алгоритмов. Все это довольно легко гуглится. Оснавная часть задач сводится к этим знаниям, если разработчики которые писали код - не обладают высокой кваллификацией.
- более продвинутый это уже специализация на конкретной бд. Какие операции из первого пункта лучше и эффективнее выполняются на движке определенной бд, а какие хуже. Предпочтение каким операциям следует отдавать, для данной бд исходя из ресурсов, которые ей доступны на сервере.Умение читать планы запросов и понимать. Понимать в каком месте запроса потенциальная проблема в потреблении ресурсов/скорости выполнения. Понимать какого плана следует достичь для оптимизации, как этого достичь с помощью изменения самого запроса/хинтов. Источники - статьи по оптимизаторам запросов конкретной бд, официальная документация бд. Если в команде более-менее толковые разработчики, то будут возникать в основном задачи такого типа.
- еще потяжелее, это уже углубление в движок бд и то как он взаимодействует с ОС. Тут требуется глубокое знание движка, возможно чтенте исходников бд, если она опенсорсная, понимание и знание некоторых принципов работы ос. Как работает кэширование и внутренние системные буферы бд, какие области памяти выделяются, какие типы памяти использутся, для чего они используются, как устроено хранение данных в файловой системе, логирование транзакций, откат транзакций, какие структуры данных для этого используются, какие процессы пораждаются бд, и какие функции выполняют, как организовано взаимодействие между этими процессами. Но на этом уровне редко попадаются задачи, обычно для их решения приглашают представителей компании, которая занмается разработкой/поддержкой бд.
Помимо этого может быть оптимизация на уровне ЕТЛ процесса или приложения, котрое взаимодествует с бд, путем уменьшения объема обрабатываемых данных/количества операций над ними при получении аналогичного результата, но это уже немного другая тема.
>>1812960 Для каждой задачи есть свой инструмент. Время отклика не единственная и не основная задача для многих субд. Думаю далеко не все key-value могут похвастаться поддержкой acid, и серьезно проработанной fault-tolerance. Плюс порог вхождения, sql проще выучить, значит проще найти специалистов - для владельца продукта это тоже важно. Плюс при значительном объеме оперативки когда вся база может быть закэширована, и скорость не является первостепенным фактором, то зачем эксперементировать на чьих-то костылях, когда есть проверенное годами решение.
>>1813004 Спасибо анон, я так понял что половина из начального это работа админа БД, но разрабу это тоже надо, а есть какие-то мастхэвыные статьи/книги? Когда собеседования прохожу отвечаю: По индексам я отвечаю что могут по одному полю или по нескольким, ускоряют выборку но замедляют инсерт/апдэйт/дэлит и работать с ними надо исходя из этого. По джойнам(видимо имеется ввиду inner, left, right и т.д.) тоже, недавно спросили про физический и логический джойн, я впервые про это слышал. И лёгкий гуглеж толком не пояснил мне ответ че к чему. Типы объединений если это UNION/UNION ALL, хз что про это рассказать, стакает таблицы друг к другу по полям. Агрегации count/sum/avg тут офк он группирует по заданным полям и вычисляет заданные агрегации. Может что-то еще дополнительно надо рассказывать?
>>1813307 да нет никаких "админов БД", кроме как в очень крупных и совковых конторах. Всегда его функцию будет выполнять разработчик. Как тебе "Админ БД" примет решение какие данные удалять и как изменять алгоритм? Без привязки к продукту это все не работает.
Концепт простой (повторить для каждой субд): 1. Изучи где здесь команда чтобы посмотреть план. Найди там числа просмотренных строк - N (K,L,M,...) 2. Сделай так чтобы NKL*M был поменьше 3. Если нихуя не получилось и в запросе есть Group by - ставишь кликхаус. 4. Если нихуя не получилось в оперативных запросах - ставишь redis или еще какой-нибудь кеш.
>>1813307 Ну это смотря как распределены задачи и ответсвенность в команде, бывает что этим занимаются разработчики, бывает что админы. Например разработчики пишут - абы не было синтаксических ошибок, а админы отлавливают самые жуткие вещи и говорят что нужно переписать. Бывает что этим целиком занимаются разработчики, а админы просто рубят сессии неудовлетворяющие определенным требованиям. В общем поразному бывает.
По индексам к примеру - как влияет селективность запроса, на эффективность использования индекса. Нет смысла вычитывать пол таблицы через индекс, простой скан в большинстве случаев пройдет быстрее. Для каких значений индексной селективности какой тип индекса лучше выбирать, стандартное деление btree/bitmap. Выборку они могут ускорять не всегда. По джоинам например - что есть такие гадкие вещи, как cross-join. Основные типы выполнения джоинов внутри бд: hash-join, merge-join, nestedloop. Но это уже ближе ко второму пункту из поста. По объединениям, что union, к примеру скорее всего будет использовать сортировку, чтобы убрать дубликаты, соответсвенно union all отработает быстрее, так как просто прочитает и склеит две таблицы - но результат может отличаться от union.
По литратуре - у oracle довольно хорошо все эти темы расписаны в официальной документации, но это лонгрид и оракловая специфика, хотя +/- везде все похоже, потом только нужно будет подтянуть специфику другой базы. https://docs.oracle.com/database/121/TGSQL/toc.htm
>>1812967 Адекватно спроектированная KV база (не вчерашним MySQL-PHP-васяном) будет на максимум на 15-20% больше аналогичной SQL базы, только вот кроме процессора (самого энергоёмкого и тепловыделяющего элемента в серверах без гпу), который требует охлаждения (в отличие от HDD/SSD), эта SQL база ещё будет жрать заметно больше оперативки, и так по кругу.
>>1813009 >Думаю далеко не все key-value могут похвастаться поддержкой acid Ну, уже есть LMDB/FoundationDB/и ещё кто нибудь. >и серьезно проработанной fault-tolerance Смотря что именно под этим понимать, но опять же — вопрос времени. >Плюс при значительном объеме оперативки когда вся база может быть закэширована При таком объёме можешь расслабить булки — ты вклад в глобальное потепление не делаешь, лул.
>>1813561 > Адекватно спроектированная KV база Адекватно спроектировать можно и реляционную базу, применяя по необходимости денормализацию и key-value, построенные поверх реляционной БД. В реальных приложениях никто не дрочит на 6 нормальных форм, там ищут компромисс. А пока ты прикрутишь к своей KV-базе всевозможные обёртки, ACID, констреинты, триггеры. вьюхи, выделять тепла это станет ровно столько же, разница будет лишь в том, что то, что раньше делала СУБД, теперь будет делать приложение, и в сумме ничего не изменится.
>>1813557 >Например разработчики пишут - абы не было синтаксических ошибок, а админы отлавливают самые жуткие вещи и говорят что нужно переписать. Бывает что этим целиком занимаются разработчики, а админы просто рубят сессии неудовлетворяющие определенным требованиям.
Какие же вы пидоры.
Золотые бессмертные строки как нельзя лучше подходят к данному моменту:
Суп, БДач. Можно ли взять для шаражных лаб по БД базы данных для серверов minecraft? Нужно чтобы было 10+ таблиц в базе для хорошей оценки. Будет ли там достаточно таблиц? Если нет, то какую предметную область можно выбрать вместо этой?
>>1816953 Самое популярное для лаб - модель магазина (ну или интернет-магазина). Таблиц можно придумать сколько хочешь. А за игоры некоторые преподы могут и нахуй послать.
>>1816960 Ого, спасибо за такой быстрый ответ. У меня просто воображение плохое, и каждое такое задание "придумайте себе задание" меня вводит в ступор. Модель магазина звучит универсально, ведь можно любой магазин сделать + разобраться в довольно таки прикладной теме. Чаю тебе.
>>1816975 Обычно, когда мне не хватало в вузе фантазии, я гуглил что-то в духе "лабораторные по базам данных варианты заданий". Но не всегда работало, один из наших преподов вообще сказал нам делать что угодно, но не магазин, ибо надоело.
Анончик, помоги. Вот например у меня есть сущность player и vehicle. И у player и vehicle может быть сущность inventory. Нужно обеспечить целостность данных, чтобы при удалении player или vehicle удалялся и inventory. Как это правильно сделать? если бы inventory был только у player то добавляю у inventory поле playerId и на него вешаю ФК, on delete cascade, и всё. А тут как? Делать несколько полей у inventory мол userId vehId выглядит хуевым решением
Наверно платиновый вопрос, но как можно удалить в постгресе БД вместе со всеми связанными джобами? Для mssql решение нашел, а для постгреса в гугле ничего нет. Помогите начинающему недо-DBA
>>1817630 А они точно должны в одной таблице храниться, эти твои inventory? Inventory транспорта и игрока не могут иметь разную структуру? Или их структура не может изменяться независимо?
Петухи Уважаемые специалисты по голубым слонам тут? На пике - причина креша целого постгреса. Контекст - aws_s3.table_import_from_s3. Правильно ли я понимаю, что если внутри расширения что-то валится с exit code > 0, то вся база падает нахуй?
Я зачем-то решил пересесть на постгрес, но тут же столкнулся с бедой. На мускуле я выключал ONLY_FULL_GROUP_BY (по дурости, маленький был). А сейчас в постгресе не могу совершить запрос.
Есть поле balance, мне нужно вывести его как на 2ом скриншоте, (чтобы было 330 - 2), сам запрос выглядит как на 3м скриншоте, но ругается, что нужно в груп бай и баланс добавить, но так запрос некорректный, помогите правильно составить блин
>>1818851 Мне нужны категории, чтобы все что в диапазоне 3300-3399 было в категории 3300, второй столбец это количество входящих туда записей. Ну и так со всеми категориями, получается
>>1818989 Делай через with. Первой итерацией считаешь сумму, можно сразу через case по группам распределить, потом делаешь group by по группам. Подзапросом тоже можно.
>>1819303 какой кейс еще, я не буду знать всех значений, но мне нужно чтобы каждое значение попадало в свою категорию, выше я скинул скрин рабочий на мускуле, но там был выключен ONLY_FULL_GROUP_BY в постгресе нужно группировать все значения, но так запрос выдает неправильные данные, значит он изначально был написан неверно(?), вот я и пришел за помощью.
Еще раз скажу Входные данные 3366 3323 7621 7677 7692
>>1821516 Нихуя это так не работает, у херочек в методичках написано, что если занижаешь ожидаемую зарплату, то не умеешь оценивать себя, а значит, доверия к тебе быть не может, и мы вам перезвоним.
>>1821563 Давай разбираться, в большинстве вакансий (на вскидку 75%-85%) работодатель не указывает ни вилки, ни потолока. Но в компании такого не может быть, потому что выделяется ставка, экономисты сидят считают затраты на стаф. Отсюда два вывода: вакансия фейковая, либо они ищут кого дешевле(может быть смотрят на цена качество). В рашке, например, нельзя определить стоимость труда по рынку, потому что никто зарплат не пишет, а по тому, как договариваются надо проводить опросы кто честно скажет. Понятное дело МРОТ никто не попросит. Но попросят к примеру 5 челиков 50к, 60к, 75к, 80к, 85к соответственно, так у трёх последних шансов просто мизер будет, потому что на первых двух будут витязи ипотеки со спиногрызами.
>>1781628 (OP) Может кто-нибудь посоветовать учебник по MySQL? Мне нужно хорошо освежить познания в нём, чтобы на собеседованиях пояснять с ноги все типичные вопросы. У меня есть парочка, но они датированы 2000 и 2003 годами.
>>1824883 Возьми свежий учебник Ивана Смузина «react sql на микросервисах» Хорошая подача материала в мемчиках, примеры из жизни зумеров, в поларок купон деливериклаб.
>>1825039 php тоже изучать по учебнику 2003 года? Что там было, php 4, верно? Берёшь учебник, учишь от корки до корки, а потом на собеседовании у тебя про какие-то лямбды спрашивают, замыкания, магические методы, статическое связывание и всякое ооп. А ты такой гордо "В php этого всего НЕТ! Я точно знаю, так в учебнике написано."
Привет господа я сейчас пердолюсь с nodejs и вот что я вдруг не очень понимаю. Что такое коннект к базе данных, и сколько он живет.
В чем суть, при старте приложения но ноде, я в одном из модулей создаю объект - или коннект, или пул коннектов с лимитом около 10.
Коннект с базой - это некое постоянное соединение? Или это просто объект с настройками, который при каждом вызове стучится в базу данных, делает то что должен и закрывается?
Далее в вызывающем коде я из этого объекта ( или из пула получаю 1 из 10 ) получаю соединение, выполняю запрос, получаю ответ, в в конце вызываю языковую конструкцию которая "закрывает" что ли соединени. А если его вручную не закрывать - что получится? А сколько в одну единицу времени может быть соединений?
>>1781628 (OP) Есть база данных с сотрудниками. В ней хранится таблица department - представляет отделы, в таблице employee соответственно хранятся записи о сотрудниках, один сотрудник может быть записать сразу в несколько отделов (или не записан ни в один). Суть в чем: для каждого отдела надо создать "таблицу" вроде той что на пикриле, то есть каждому из сотрудников из этого отдела надо поставит ьв соответствие Проект и некий числовой идентификатор (как хорошо он выполннял работу), как блин такое в реляционках мутить? Знаю чт ов Postgresql есть поле json, пока смотрится логичнее всего: захуярить внутрь таблицы department поле json где ключи будут идентификаторами сотрудников, которые в своб очередь буду ссылать на другой json... В реляционной модели такое можно сделать?
>>1826304 Всего одна новая таблица в которой: employee_id, project_id, score То есть каждая строка состоит из трех этих колонок (ну еще ключ ForeignKey с constraint чтобы было отношение 1-1 к department)
Пацаны, что значит ".body" при выборе данных в селекте? Ну например > SELECT huntaname.body Синтакис подсвечивает это слово, но чот я нихуя не смог нагуглить на эту тему
>>1827517 Нету, говорю же, это чисто со скрина тема >>1827523 > То что ты нубло ебано Я этого и не скрываю > почитай про алиасы. Это не они, там нет AS
Сап, двач. Планируем строить аналитический сервис. В сутки у нас ожидается около 5 миллионов событий, это около 10-15 миллионов строк в базе, без ограничений по времени хранения. Real-time не нужен, можем писать данные, и раз в сутки агрегировать. Справится ли с таким MySQL, или стоит смотреть в сторону какого-нибудь ClickHouse?
Как догадаться какой сервер нужен (Процессор память, ядра, поддерживаемые инструкции и т.п.) для той или иной базы данных? Есть какая-то конкретная методология расчёта?
Аноны, где почитать как работает сам SQL изнутри, как он формирует данные, как, к примеру, работает SELECT вместе с WHERE, как происходит поиск по критериям и можно ли облегчать эту задачу SQL какими-либо способами? В общем не синтаксис, а фундаментальные знания. И в чем польза индексирования нескольких полей в таблице?
>>1827816 SQL это всего лишь язык. Базка в общем случае делает всё как ты сказал: берёт таблицу, всю перелопачивает, по WHERE всё отсеивает и отдаёт. Если джойны, то создаёт временную таблицу на джойнах и всё то же самое. То есть результат всегда должен совпадать с наивной реализацией.
А вот как это всё оптимизируется это уже более интересный вопрос. Почти везде для оптимизации нужны индексы. Индекс это по сути сортировочка всех строк в определённом порядке по определённым полям. Если условия в WHERE совпадают с тем как создан один из индексов, то бд сможет оптимизировать запрос с помощью этого индекса: она по сути не заглядывает в строки, а ищет только в индексе. Индекс никогда не нужно перебирать от начала до конца чтобы что-то в нём найти.
> польза индексирования нескольких полей Там логически сортировка другая получается. Потому что каждое из полей ты можешь ASC или DESC, и комбинации полей будут идти друг за другом в разном порядке.
всем здарова, у меня такой вот вопрос, задался вопросом как бд подключить к сайту, полез на ютуб, а там какие то старые дядьки своим ПХП мне в рот лезут, можно ли как то без ПХП подключить бд к сайту?
>>1829824 Странный вопрос. БД принципиально подключается к бэкенду можно и к фронтенду, но не важно. Если у тебя бэкенд на ПХП, то никак без ПХП ты этого не сделаешь, будь то вручную или косвенно через цмски и движки.
>>1829806 Ты не разбираешься в теме. Не пиши здесь больше и не вводи людей в заблуждение. Информация по capacity planning, а так же документация к СУБД дают исчерпывающую информацию по выбору оборудования и тюнинга самой СУБД под конкретные нагрузки.
Решил почти все задачи на sql academy (все лёгкое), но ушлые разрабы не дают сертификатик без премиум аккаунта. Прорешал задач сорок на sql-ex, буду дальше их добивать, они там реально сложнее
Задачки это хорошо, но есть ощущение что я просто дрочу на месте без прогресса. Куда смотреть дальше, чтобы получать знания приближенные к реальности? Написать приложение на комп с работой баз данных? Может почитать что-то про правильные построения самих бд?
>>1830061 Скачиваешь книгу Куликова “Работа MYSQL, MS SQL SERVER и ORACLE в примерах”. Тут определяешься с базой данных. Если это SQL Server, то скачиваешь на торренте данную СУБД. Если Oracle, то скачиваешь образ для WMvare с их сайта, или используешь их online СУБД. Далее. Находишь в зависимости от СУБД серьезные книжки.
>>1830061 Найди работу в интеграторе. В реальности на СУБД такие вещи пилят (особенно если это oracle или sql server), что ты охуеешь такое с нуля писать.
>>1830149 Значит работа в аутсорс конторе, котора продаст твою жопу банку, где ты увидишь код написанный поколениями с самописными etl-системами, очередями и пакетами хранимок на 10k строк. > Кроме синтаксиса у самих бд Лiл. Ничего. https://docs.oracle.com/database/121/ARPLS/toc.htm - но со временем будешь узнавать больше из этого списка.
>>1830160 >>Ничего Типо я вот порешал задачи на сайтах, и такой красивый могу претендовать на джуна? Звучит слишком просто, или мне по началу за такую должность только на воду без хлеба хватит денег? Я проходил собес по бд, но жидко обосрался от нервов и там пришлось бы изучать type script
>>1830165 Реально тебе дело говорят - иди работай. Без опыта работы на реальном проекте - чем бы ты ни занимался в свободное время - тебе по началу будут предлагать на "хлеб и воду", очень маленький шанс, что кто-то тебе даст ставку мидла, потому-что ты дома что-то делал. Задачи решаешь - иди работай, перед собесом на конкретную вакансию подтяни просто знания по особенностям работы конкретной базы которая указана в вакансии, типы там всякие, функции работы со строками, числами датами, оптимизацию немного погугли в все. Дальше можно дома заниматься изысканиями и исследованиями если работа - фуфел оказалась, и уже на следующем собесе рассказывать, что ты такими крутыми штуками на работе занимался)
>>1830343 Проблема только в том, что я не безработный студент на шее у мамки, и пиздец как не хочется сидеть въебывать джуном за 15к, когда я сейчас деградирую за 30. Хотя с другой стороны я понимаю что за просто так мне только хуй за щеку присунут.
>>1830531 Мне сначала 50к предложили. Через 2 месяца я ушёл на 70к, потом 90к, сейчас вот оффер на 140к. 2 года опыта работы, а sql-ex я так и не добил, но когда-нибудь сертификат там я получу.
>>1830343 >Реально тебе дело говорят - иди работай Проблема таких советов - не факт что работа даст скилл и опыт.
Потому что без скилла и опыта возьмут максимум на галеру или там в госконтору. Ни там, ни там ничего правильного делать не получится. А в конторы, где можно получить полезный (ключевое) опыт не берут без этого опыта.
Я сейчас тружусь в такой конторе. Пишу в одиночку серьезный софт обеспечивающий полный жизненный цикл организации (учет и оперирование всего что происходит), так как предыдущий морально устарел лет на 20, не соответствует никаким требованиям, дико не удобен и совершенно не пригоден для допиливания. Поэтому собрались и решили сделать по новому модно и молодежно.
Как бы у меня уже есть опыт разработки приложения от пустого окошка, до конечного разворачивания на говнокомпах (у нас до сих пор есть несколько с Windows XP из-за привязанных к ним железках). Более ста одновременных подключений пользователей. Базы данных по 40гб (ведь их-то нельзя было резать, вся история должна быть доступна)
И...
Я даже до собеседований на джуна (но с зарплатой выше чем мне платят сейчас, ясен пень речь не про конторки с 20к деревяных оплатой) нигде еще дойти не могу - мы вам перезвоним.
>>1830904 Ну я сужу по своему опыту - и могу сказать, что когда у меня был начальный уровень - практически любые задачи давали мне полезный опыт - если я не делал их на отъебись и побыстрее. И конечно это должны были быть реальные задачи - а не "заполни формочку нарисуй квадратик".Просто сидел и разбирался, почему не работает, как сделать лучше, как правильно, как другие люди делают и почему так, а не иначе.
И ты найдешь такие задачи с большой долей вероятности, как во всяких яндексах, так и в энтерпрайзах. В энтерпрайзах если повезет иногда можно заниматься параллельно своими делами и исследованиями. А в яндексах если не повезет - сидеть и несколько лет херячить запросы к api. Просто в яндексах создаются более комфортные условия, и обучению и развитию сотрудника уделяется больше внимания до определенного этапа.
И если ты занимаешься кодингом, я не переходил бы на твоем месте чисто в sql. Если интересны базы и работа с данными - посмотри в сторону highload.
Судя по описанию того что ты делаешь - ты работаешь на каком-то производстве/предприятии не в милионнике, я угадал? Если да - попробуй поискать удаленку в ДС-ах, может получится проще и быстрее
Делаю задачку из пхп треда, нужно сделать сайт с тестами (аля тест на зека или кто ты из наруто). Я выбрал такую схему: таблица с тестами, таблица с вопросами и таблица с вариантами ответов. У каждого варианта ответа есть id вопроса в котором он используется и у каждого вопроса есть id теста в котором он используется. Вроде выглядит адекватно, но я не представляю как мне теперь по id теста вытащить за один запрос все вопросы к этому тесту и все варианты ответов к этим вопросам. Я так понимаю нужно юзать join или как? БД - PostgreSQL, если это важно
>>1832300 https://ru.wordpress.org/plugins/quiz-maker/ Пхп - это язык, где программирование доведено до примитивизма. Если возникла какая-то проблема, нужно первым делам искать нужно даже не ответ на StackOverflow, а плагин для WordPress. Но да ладно. К примеру, есть tests (id, title) и questions (id, text, test_id). Можно написать select * from tests, questions where tests.id = questions.test_id and test.id = (id теста), здесь выполнится неявный join, и у тебя будет результат: tests.id | title | questions.id | text | test_id 1 | тест1 | 1 | вопрос1 | 1 1 | тест1 | 2 | вопрос2 | 1 1 | тест1 | 3 | вопрос3 | 1 Как видишь, вопросы разные, но название теста и его id одинаковые, то есть некоторые данные дублируются. Далее добавить к запросу answers, и всё.
Есть следующая структура данных: id: string children: string[] И еще какие-то поля. В children хранится список id. Может быть несколько уровней вложенности. Как за один запрос вытащить все дерево сущностей начиная с какого-то id? В монге для такого можно сделать DBRef на ту же коллекцию. Важная деталь - данные хранятся в эластике, но треда по nosql тут вроде нет.
Товарищи ребятки здравствуйте! Хочу вот чем поинтересоваться, правильной ли дорогой собственно говоря иду? Может кто из вас подкинет здравых мыслей. Вводная: Пашу инженером конструктором на околосовковом предприятии. Неплохо знаю САПР со стороны технологов конструкторов. Знаю о существовании служб, занимающихся сопровождением САПР и КТТП. Есть желание: перейти из сферы машиностроения через сопровождение САПР в айти. Так как на текущем месте и должности развиваться в айти не вижу возможности. Задача общая исходя из советов грамотных товарищей и самоопределения: грести в Девопс. Для этого решил начать с изучения sql поэтому сюда и пишу собственно Предложили: изучать sql с помощью книги sql для чайников (т.к. в sql не разбираюсь. Только в универе что-то делал) плюс читать документацию по PostgreSQL. Также предложили пройти пару курсов в интернете. Вопрос: правильная ли стратегия? Может что-то упускаю? Нужно ли что-то координально менять и глядеть как-то по другому на это вот все дело? Также хочу попросить полезные источники информации для начинающего в области sql. Пригодится любая информация.
>>1834144 Devops помоему слабо связан с sql. Если базы данных на проекте нет, то никак. Если хочешь в devops - то тебе надо грести скорее в unix-админы, получать там базовые знания по администрированию, а потом на это накладывать знания о всяких приблудах типа docker-ов, ansibl-ов, jenkins-ов и git
>>1834763 Это похоже на внешнюю таблицу. По указанному пути должен лежать скорее всего файл в определенном формате, например csv. Вроде в sqlserver такой синтаксис возможен, но путь тут юниксовый указан
Чуваки, у меня вопрос. Сам я вообще sql не знаю, делаю по работе только select по определенному запросу, в котором меняю where в зависимости от служебной необходимости. Тут столкнулся с необходимостью вытащить из БД большой объем данных.
К примеру, у меня есть такой запрос:
SELECT ID, Name, Birthday FROM Ants WHERE ID LIKE '4464558' OR ID LIKE '5645647' OR ID LIKE '5431546' OR ID LIKE '2678654' OR ID LIKE '8864587'
Проблема в том, что в данной конкретной задаче этих ID не пять штук, а 30000, они уникальны, не повторяются, не соответствуют никаким диапазонам. Я написал этот запрос с 30 тысячами OR и понимаю, что такой запрос - это ебланство. Но не понимаю, каким образом должен выглядеть нормальный запрос при необходимости вытащить данные именно при таких условиях. Толкните в нужную сторону. А еще SQL Server Management Studio просто зависает после открытия такого большого запроса.
>>1834979 Если эти ID можно выбрать селектом из базы, тогда это просто (join, или cte, или `ID in (select id from ...)`, ит.п.) Если же они вне базы, тогда только по частям.
>>1834979 Можно через IN, но тоже хуйня. Взрослый вариант это сделать временную таблицу с твоими айдишниками, а потом заджойнить с нужной. Кури, что такое temporary table короче.
>>1834979 >делаю по работе только select по определенному запросу, в котором меняю where в зависимости от служебной необходимости Совсем дегенерат? Кем работаешь?
Разработка веб-приложения для хранения и защиты БД Аноним
Аноним21/10/20 Срд 20:19:14№1836400341
Гайз! Нид хелп, плз! Как юный пекус, не имеющий опыта в написании курсовых. Советов мне! В чём может быть научная новизна в приложении - аналога oracle? Что касается актуальности, то функционал веб-приложения реализуется через браузер, полностью поддерживает расширения CSS и полный набор HTML-тегов, а также отсутствует привязка к стандартной библиотеке. Обеспечена концепция детализации и перекрестная фильтрация. Встроен аппарат статистики и анализа данных, возможность построения 3D моделей. Обеспечена высокоуровневая защита данных через соответствие паттерну.
Гарантирован ли порядок присвоения столбцов в update statement'е? Например в скрипте update test_table set description = code, code = replace(lower(code), ' ', '-'); могу ли я быть уверен, что всегда сначала обновится description, а потом после этого code?
Подскажите дауну, почему так не работает: select maker from (select PC.model, PC.speed, Product.model, product.maker from PC LEFT JOIN product on Product.model = PC.model where pc.speed >= 450) В скобках же должна создаться новая таблица. Задача с sql-ex.ru: Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker
кто юзал squirrel sql client, там есть cli версия, может кто подскажет как ею пользоваться, команда connect(alias) выполнилась, но признаков успеха не успеха почему-то нет, но например команда exec("SELECT * FROM test") уже валится с нул поинтер экспешн, хотя в гуи версии всё хорошо работает
Для каждого из летавших пассажиров определить количество дней в апреле 2003 года, попавших в интервал между датами первого и последнего вылета пассажира включительно. Вывести имя пассажира и количество дней.
Сделал вот такой запрос:
SELECT name, CASE WHEN DATEDIFF(DAY, mdate1, '2003-04-30') > 0 THEN DATEDIFF(DAY, mdate, mdate1)+1 ELSE CASE WHEN DATEDIFF(DAY, mdate, '2003-04-30')+1 > 0 THEN DATEDIFF(DAY, mdate, '2003-04-30')+1 ELSE 0 END END FROM (SELECT sl1.id_psg, mdate, mdate1 FROM ( (SELECT id_psg, min(date) AS mdate FROM pass_in_trip WHERE id_psg in (SELECT id_psg FROM passenger) GROUP BY id_psg) sl1 INNER JOIN (SELECT id_psg, max(date) AS mdate1 FROM pass_in_trip WHERE id_psg in (SELECT id_psg FROM passenger) GROUP BY id_psg) sl2 ON sl1.id_psg = sl2.id_psg)) sl3 INNER JOIN passenger ON sl3.id_psg = passenger.id_psg;
На тренировочной базе сошлось, а на тестовой (4) несовпадения. ЧЯДНТ.
>>1843564 Я так понимаю таблица у нас имеет вид Дата_полёта|ФИО
Вот моё виденье: 1) Делаем выборку только за апрель 2) Групируем по фамилиям. 3) Выбираем максимальную и минимальную дату полёта и считаем количество дней между ними.
Так блин, что-то не врубаю, как мне вставить в таблицу значения так, чтобы они обновили текущие строки а не просто вставили новые?
Вот скажем есть таблица где 2 колонки: имя (varchar) и возраст (integer). В таблице уже есть некоторые записи, как мне вставить туда новые записи так чтобы в случае совпадения имен уже существующая строчка перезаписывалась?
Анон, готовлюсь к собесу (веб-макака), дай каких-нибудь адекватных задач. Только именно адекватных, не нужно блять олимпиадной ебалы. В принципе обычно спрашивают что-нибудь на джойн + группировка. Такое уже на уровне подкорки просто из практики. Но боюсь если хоть чуть посложнее спросят, то поплыву. Вот хочу просто хоть немного потренироваться.
>>1781628 (OP) Возможно платиновый вопрос но как в постгресе удалить БД вместе со всеми связанными джобами? Весь гугл перерыл а даже намека не нашел. Для MSSQL все просто а тут какой-то затык.
Аноны, объясните значки на концах линий, показывающих связи между таблицами на пикче. Я знаю только отношения 1:1 1:M и M:M. А тут значков явно больше.
Аноны, у меня есть таблицы в postgresql: purchases items, соответсвенно покупак на один итем может быть много, у items есть колонка price, как мне посчитать процент от продаж, который занимает один итем, в одном запросе не получается выбрать сумму для всех итемов и сумму для всех покупок одного итема, пробовал over() но там нельзя использовать where который мне нужен, пробовал with использовать, чтобы запомнить сумму, но тоже ошибка вываливается, вот пример запроса, который должен быть
select items.id, items.price, count(purchases.item_id), sum(items.price), /Тут должны быть проценты/ from purchases inner join items on items.id = purchases.item_id where date BETWEEN '20190101' and '20200101' group by items.id order by sum(-items.price) limit 10;
>>1781628 (OP) В чем принцип работы CRM-систем? (везде где ни читаю какая-то инфоцыганская херня для манагеров и продаванов) Чем отличается от облачной БД? И каков вообще принцип функционирования этой херни?
>>1848452 получил повышение на работе, теперь работаю с и стал единственным ответственным за бд много всего навалилось, пока работаю с готовыми отчетами/запросами от предыдущего человека, первое время он помогал если возникали вопросы и трудности мои знания в скл закончились года два назад на курсе по бд когда получал вышку, естественно тогда забивал хуй и делал минимум чтобы получить зачет/экз/сдать курсач сейчас нужны знания на случай чп (вдруг че сломается или понадобится написать новый запрос/отчет) да и мой предшественник посоветовал изучить это дело сам он практиковался на sql-ex.ru и съябывать на место получше как сделал он сам, благо ресурсы соответствуют чтобы расти
>>1848470 да не, почему всякое бывает. видел в провинции мелкую конторку, начальство которой пилило бабло на заказиках от гос-ва. у них был похожий принцип набора кадров
>>1848467 хз че за дефицитошизики, не был в соседнем треде устроился еще студентом на линию тп, получил образование - перевели в отдел внедрения, там как раз попал в подчинение челику на чье место я попал, сейчас он ушел, а я на его место история смешная на самом деле, в работе все нравилось, кроме отношений с ним, он все время меня дрочил, загружал работой бывало я заметно перерабатывал относительно других. я его просто ненавидел и хотел уволиться, все время казалось что это личная неприязнь, продолжалось около года. в итоге когда он увольнялся - посоветовал меня на свое место, меня даже без лишних вопросов повысили (был 5 минутный диалог с начальником, вопросы в стиле "Вот Имя тебя советовал, говорил ты хорошо работаешь и справляешься, ну как справишься?") щас благодарен тому челику, ну и хочу послушаться его совета и вкатиться и дальше развиваться в этой области к тому же рабочее место есть, так скажем условный трамплин, для начала нужно обучиться чтобы хотяб соответствовать своей должности, а дальше развиваться и съябывать
ну и вопрос повторю: sql-ex.ru + sql-tutorial.ru ? или что-то еще посоветуете?
Решаю 18 задачу в скл-ех, пиздос встал, не могу выкупить, как там эти переменные вводятся, а потом еще по ним два иннер джоина. Если кто может глянуть, помогите, пожалуйста, посоветуйте статью почитать на эту тему.
>>1848502 Братан, это задача про цветные принтеры? Посмотрел свое решение, и походу ты слишком усложняешь. Плюс там же к каждой задаче есть рекомендованые темы
>>1848517 Блядь, результат получил верный, но теперь на проверочной базе тест не прошел. Ты сколько примерно эту задачку решал? Я сижу второй день, и у меня чувство, что я тупой, как валенок.
>>1848717 Сорян, что фотография, не с домашнего пека сижу. Ну я понял, что там груп бай можно заменить дистинктом. Коварная штука этот проверочный набор данных, приходится визуализировать возможную проблему.
Как обновить сразу много значений в таблицей? Вот есть у меня список кортежей вида (name, age, department_id), команда UPDATE обновляет лишь одну строчку за раз, как мне вбросить весь список целиком чтобы обновлялись значения где name совпал?
>>1848879 Блядь, откуда вы такие берётесь. У меня один друг работает в повер биай, говорит что там скл джуны от 60к начинают, при этом приходят ебла, которые с нулевыми знаниями просят 200к, хотя он сам 200к получает, правда он в питоне разбирается ещё. Знакомая тян пришла на 40к в банк системным аналитиком вообще с нулевыми знаниями, не по знакомству. Через год повысили до 70к при том, что она хуи пинала. Двач какая-то депрессивная зона всего самого хуевого.
Есть таблица с продажами, [1..x] магазинов, [1..y] наименований товаров, есть таблица с планами на следующий год.
Задача сводится к сведению таблицы в одну с показателями: дата, магаз, товар, продажа, план/null, продажа прошлого года/null и несколько расчётов по последним трём колонкам. Проблема заключается в очень долгом выполнении запроса; задача предполагает использовать UNION / UNION ALL для решения, но я даже примерно не могу представить, нахуя он тут нужен. Первым пробовал вариант с join'ами каждого нужного поля -> время выполнения стремится к бесконечности. Вторым пробовал WITH (собрать таблицу) и вытаскивать данные из неё. В таблице данные уже прошли через все процедурные фильтры (дата, магазин).
>>1848932 Есл ив питоне шаришь то как в sqlalchemy сделать массовое обновление таблицы из >>1848888 То есть ей передаем массив кортежей а она далее все делает как надо?
Даров почоны, вляпался тут в скул и пытаюсь его забодать. К результирующим толбцам бла бла AS thing можно ли обращаться далее по квери в теле (WHERE ...) и использовать в ORDER BY? Если да, то как?
>>1849939 Можно подробнее про подзапрос? У меня код такого плана SELECT ... FROM ... LEFT JOIN ... ARRAY_REMOVE(ARRAY_AGG(DISTINCT LOWER(lists.name))) AS goods WHERE ... ORDER BY ...
Сортировка важнее, но главное, чтобы не пришлось передрючивать уже имеющийся запрос с ног на голову.
Кто-нибудь использует DBeaver? Подключаюсь к удаленной постгресовской бд на сервере, лог/пасс есть, подключение проходит, отображается вся база, таблицы, колонки, список ролей, диспетчер сессий. Но данные не отображаются вообще, т.к. ни один запрос (SELECT в т.ч.) не проходит, ошибка SQL Error [42501]: ERROR: permission denied. Как фиксить? Права на запросы есть
Есть один скрипт для MS SQL. Хочу, что бы все поля таблиц в этом скрипте стали обёрнуты в квадратные скобки, по типу: Было: Animal.Name Должно стать: Animal.[Name]
Есть ли готовый скрипт/функция ms sql менеджера/регулярка которая сделает это? Вообще, что угодно подойдёт, пусть хоть сайт в интернете.
Аноны, есть те, кто парсил строку в Sqlite3? В существующей таблице столбец с данными, разделенными запятой (comma-separated). Есть ли простой и легкий способ разобрать эти данные по столбцам в другую таблицу ТОЛЬКО средствами SQL?
>>1855916 Если ты уверен, что в значениях нет символов кавычек, можешь попробовать превратить эту строку в JSON массив через замену и конкатинацию, и далее использовать табличную функцию json_each для её разбиения.
Пытаюсь в пг распарсить xml в таблицу, но почему ловлю следующий экзепшен. Чо я делаю не так?
SQL Error [2200M]: ERROR: could not parse XML document Подробности: line 1: Extra content at the end of the document <node>1</node><node>2</node><node>3</node> ^
select * from xmltable('$n' passing (('<node>'+replace('1;2;3',';','</node><node>')+'</node>')::xml) columns "Value" int path 'node') vals
Как эту хуйню решить? Я не понимаю, я менял всё, я меня соединение таблиц, сами таблицы местами, где я наебался? Я вообще не понимаю, как результат верный а решение неправильное? https://www.sql-ex.ru/learn_exercises.php?LN=14
>>1856351 Вот решение, думай сам где проебался "Ответ верный, а решение неверное" грубо говоря означает что твой текущий код подогнан к текущей базе данных
>>1855861 Знаю админа бд одного мощного - он в сингапур перекатился, потом выкатился назад. Грустно и скучно стало на чужбине. Мне в гермашке как-то вакансию с релокейтом предагали, но по деньгам не интересно было. По базам редко такие вакансии проскакивают. И это не етль - а администрирование + оптимизация/разработка, проектирование интеграций с бд и потоков данных обычно
Плюс я бы с удовольствием бы послушал про зп местных. Тут есть чистые базовики? Мб ДБАшники? Как должность называется? Какие задачи выполняете? Сколько уже работаете? Сколько получаете?
Бля 10 лет назад ковырял я этот sql-ex и забросил потому что была такая залупа, что непонять об че разъебался. 10 лет прошло, а они с этим ни сделали ни ху я.
>>1857839 Я понимаю что спецом, но мне как понять в какую сторону копать? Получается мне надо придумывать какие-то дополнительные данные, которые своим запросом я не отсекаю. А могли бы намекнуть.
>>1858241 А нахера вы опущи позволяете платить вам меньше кабанчику в мухосрани, когда он наоборот экономит на аренде офиса неебацца сколько, снимая его в мухосрани а не в дс, а работу вашу один хуй продаёт заграничным заказчикам, что кобаньствуя в москве, что кобаньствуя в мухосрани вашей?
>>1857750 Живее всех живых. Какая разница, облако - не облако? Ну будет админ сидеть на строне облака а не на стороне клиента. Экспертиза все равно нужна.
Тех кто чисто внутри БД что-то делает - таких наверно нет. Обычно это работа/настройки и на стороне ОС и на стороне БД. Сильные админы обычно еще и в unix-ах хорошо шарят.
В ДС норм админ на энтерпрайзе может 200к и больше получать. Скорее даже не меньше 200.
Я 6 лет отработал чисто на базах, начинал с etl - потом ушел в более системную область. Когда ты работаешь etl-щиком то все твои задачи в основном сосредоточены внутри бд и ограничены самой бд - через 2 года мне стало скучно. Сейчас у меня много технических задач на уровне взаимодействия бд и ОС и другим ПО. Много времени может занимать разбор багов внутри бд, поиск обходных путей. Сложно выделить какой-то конкретный тип задач. Есть кластер с одной или несколькими бд к которому есть определенные требования и ты должен сделать так, что-бы он функционировал и удовлетворял этим требованиям и следить за этим - отсюда проистекают всевозможные задачи)
В должности никак не отражено, что я работаю именно с бд. Года два-три назад зп перевалила за 200
Умоляю покажите как выглядит ссылка на стороне СУБД не могу разобраться Нарисовал такую табличку вроде все правильно, но моя ссылка - primartkey одинаковая а одинкавых ключей небывает
>>1781628 (OP) Пизда рулю. Накосячил немного с SEQUENCE в Postgresql, захотел ее удалить чтоб заменить другой но во время DROP SEQUENCE ожидаемо выскочило: cannot drop sequence operators_id_seq because other objects depend on it Потому что эта последовательность уже приписана к колонке id в той таблице operators... Мне надо удалить ее и заменить другой, как это сделать, не стирая саму таблицу?
Ребяты. Помогите, пара вопросов Как сделать правильно связь многие ко многим между Route и Worker. По одной стороне через Team сделал, но вот через Company не пойму как лучше организовать. Потому что вроде выглядит все логично И не могу еще к третьей нормальной форме это все привести, типа атрибут airplane_type в сущности Route или в сущности class атрибут number_of_seats и т.п.
Аноны, что бы глянуть/почитать по оптимизации view в Postgres 11?
Есть две таблицы(500мб и 30мб размерами), из 30мб таблицы сделана view_1. Затем, через union all, соединяю две таблицы и view_1 в одну жирную view. Запросы к этой жирной view занимают довольно приличное время - десятки секунд. Собственно, отсюда и вопрос - в какую сторону смотреть и что делать для оптимизаци.
>>1859433 Направление я менял в рамках одного места работы, поэтому для трудоустройства наверно нет. О том помагает ли предыдущий опыт в текущих задачах - частично да, частично нет. Знание каких-то конкретных etl инструментов мне сейчас не требуется, но базовые какие-то принципы - да нужны
>>1860777 Вот такая хуйня получилась. Сделал "SELECT *" т.к. подобный запрос в БД шлет tableau и выкачивает данные себе. Последний раз этот запрос занял 2 часа и потом просто отсоединилось, не закончив.
>>1861465 Данные он выкачивает из таблицы, вместо таблицы у меня view. Соответственно когда он начинает "выкачивать данные" он обращается к этой вьюхе и там начинаются вычесления для того что бы вернуть в табло данные в виде готовой таблицы. И вот уже эти вычисления при построении вьюхи производились слишком долго.
Сап, аноны. Глупый вопрос. Если у меня есть подзапрос, использующий row_number(), мешает ли это оптимизации соединений этого подзапроса? Если его таблицы используются ещё несколько раз?
>>1849469 Пробуй через with с фильтрами, плюс можешь поддержать индексами. Декомпозируй и смотри за сколько выполняются куски, ищи самую медленную часть, смотри план запроса по ней.
Короче не особо могу в бд, но курсач срал на это, потому прошу помочь. Есть такой запрос, но мне ещё надо получить сумму последнего столбца по полю orderID. Как это сделать?
Почему потсгрес иногда начинает тупить? Вот есть таблица на которой я тестирую функции. В функции я эту таблицу в начале делаю тракейт, потом копирую туда данные из копии этой таблицы и потом уже выполняю всякую дичь. И вот в начале все работает ок, но потом скорость просто в ноль падает. Вакуум аналайз пробовал делать, даже растартил пострес. Толку нету.
Сап бдая. Мне бы справочник Станека по Sql серверу 2012 где откопать. Называется "Microsoft SQL Server 2012: Справочник администратора", Уильям Станек. Весь гугл перерыл, нашел только англоверсию, и ту неполную. Есть какие-то мутные сайты с регистрацией по мылу, но подтверждения нихуя не приходят, а на рутрекере только говно мамонта по sql server 2005 нашел. Вдруг есть тут у кого.
>>1865007 Идешь на сайт orelly, регаешся тебе дают триал на недели с доступом ко всем книгам. Через неделю регаешь новую почту. Там даже подтверждение не нужно, просто на несуществующую можно регать
>>1865049 Гугли табличные выражения, делает тоже самое но в отдельной конструкции.
>>1865099 > Идешь на сайт orelly, регаешся тебе дают триал на недели с доступом ко всем книгам. Через неделю регаешь новую почту. Там даже подтверждение не нужно, просто на несуществующую можно регать Спасибо. Я смотрю там все на ингрише, там локализованные на русском версии книг есть вообще? Просто толку мне пердолиться с триалами если там только версия на английском, которая у меня и так есть
Можно ли в эластике каким-то хитрым запросом вытащить всю иерархию документов за один вопрос, при условии, что у каждого документа есть ссылки (айди) на своих родителей и детей?
>Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование Ребята, это чисто я, ток собеседование на стажера дата-аналитика в понедельник... sql будет не мейн темой, но сказали, шо надо уметь делать простые запросы и знать базовую теорию насколько базовую, не сказали Подскажите, что лучше: порешать литкодовские изи или sql-ex задачки? (времени на то и другое нет) И ещё бы где-то найти инфу в супер сжатом виде по внутреннему устройству бд, индексам, транкзакциям, уровням изоляций итд
>>1781628 (OP) Сейчас читаю книгу lerning sql. Там встретился такой пример
SELECT groups.name, COUNT(*) num_customers FROM (SELECT SUM(a.avail_balance) cust_balance FROM account a INNER JOIN product p ON a.product_cd = p.product_cd WHERE p.product_type_cd = 'ACCOUNT' GROUP BY a.cust_id) cust_rollup INNER JOIN (SELECT 'Small Fry' name, 0 low_limit, 4999.99 high_limit UNION ALL SELECT 'Average Joes' name, 5000 low_limit, 9999.99 high_limit UNION ALL SELECT 'Heavy Hitters' name, 10000 low_limit, 9999999.99 high_limit) groups ON cust_rollup.cust_balance BETWEEN groups.low_limit AND groups.high_limit GROUP BY groups.name;
отдельно подзапросы выполняются все ок. С синтаксисом тоже ок. Даже если в глаза не ебаться и прочитать запрос то все в порядке.
Но мускуль ругается на ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups on cust_rollup.cust_balance between groups.low_limit and groups.hig' at line 14
> Есть запрос > SELECT * FROM employee WHERE sex = 'm' AND salary > 300 AND age = 20 > Нужно сделать индекс КОНКРЕТНО БУКВАЛЬНО ПОД ЭТОТ запрос, чтобы именно такой запрос был супер-быстрым
Короче, как я понял, здесь фишка в том что нужен определенный составной индекс. Я ответил что типа сделаем index(salary, sex) и отдельно index(age). Я не знаю почему я решил age выносить отдельно. И я до сих пор не догоняю, как правильно. У нас же типа btree, в составном индексе будет сортировка по вложенным полям... блять, тут есть вообще разница в порядке полей? И вообще смысл в составном индексе?
Гайс смотрите есть таблица(сформирована типо из банковских проводок), надо вывести промежутки дат, когда сумма не нулевая. Я смотрел подобную задачу решали оконной функцией где херачили группы и потом выбирали минимальную и максимальную, но я не расчехляю как её сюда можно применить. Хотя бы намекните как это реализовать можно.
>>1781628 (OP) Я не могу понять, так left outer join и left join это одно и то же или разное? Почти везде пишут, что это одно и то же, но тогда к чему испльзовать именно конструкцию со словом outer?
>>1869137 Первый вариант полная форма, но если мы используем left, сразу становится понятно что это outer, т.к. направленных inner-ов не бывает. Можно сравнить с AS, писать не обязательно и с пробелом работает. Использование outer удобно на этапе обучения.
Сап, аноны. Есть таблица с десятками миллионами записей и она постоянно растет. У каждой записи есть уникальный ключ (то есть уже проиндексирована). Задача: прочитать записи в таблице по уникальномым ключам. Проблема: с увеличением базы - большое время ожидания. Я вижу выход только в репликации и шардинге базы. Кэширование не поможет так как постоянно выбираются разные данные, соответственно полезно в кеш попадет мало. Что можете посоветовать?
Анон, что с меня она хочет? Создал 2 пользоватиля через консоль, не через команду createuser. Теперь не могу удалить, сменить роли и тп. Вот пример удаление других пользователей.