А вот и новый оптимизированный баз данных тред,в котором мы-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания-Разбираемся, почему PostgreSQL - не Oracle-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс-Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обещстве-Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование-Анализируем, как работает поиск вконтакте-Игнорируем конкаренси-шизика, не понимающего, зачем базы данных нужны-И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильноПоехали!Старый: https://2ch.hk/pr/res/1502870.html
И сразу вкачусь с вопросом к тестовому заданию, которое завалил:Есть БД, есть хранимая процедура, которая принимает как входные данные две даты и группу товаров, а на выходе даёт выборку по продажам товаров этой группы за указанный период времени.В задании последним пунктом стоит:"Вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"Что от меня хотели и как это нужно было сделать? Мозга как включить данную выборку в уже существующий скрипт мне не хватило.
Есть таблица с данными. Нужно что-то наподобие тэгов/меток.Как это сделать? Отдельными столбцами? Или есть ещё варианты?
>>1550960Да просто, пилишь отдельный столбец. Если это для отслеживания изменений, то slow changing dimension.
>>1550940ХЗ, какая-то кривая формулировка могу только предположить что есть ещё один столбец который отвечает за ндс.
>>1550940Итак, что у нас есть?Есть Магазин, что-то типа id, имяЕсть Группа_товаров, что-то типа id, имяЕсть Товар, что-то типа id, группа_товаров_id, имяЕсть какие-то Продажи, что-то типа id, день, магазин_id, товар_id, цена_с_ндсSELECT Продажи.день, Магазин.имя, Группа_товаров.имя, SUM(Продажи.цена_с_ндс) FROM ПродажиJOIN Магазин ON Продажи.магазин_id = Магазин.idJOIN Товар ON Продажи.товар_id = Товар.idJOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.idWHERE Продажи.день >= {ДАТА-1} AND Продажи.день <= {ДАТА-2} AND Группа_товаров.имя = {ИМЯ-ГР-ТОВ}GROUP BY Продажи.день, Магазин.имя, Группа_товаров.имяНадеюсь нигде не ошибся. Проверьте, обругайте, плиз.
>>1551093Да, разумеется есть отдельные поля "Продажа с НДС", "Продажа без НДС" и прочее.>>1551136Мякотка в том, что выложить решение нужно в виде текста одной процедуры. То есть я так понял что в том же выводе инфы по продажам определённой группы товаров (или нескольких) за конкретный промежуток времени, а срез по магазину/группе товаров вроде как предполагает lifetime сумму по магазину/группе товаров, то есть where для этого запроса в основном селекте не будет работать.Короче вот архив с дампом и заданием. Мне уже без надобности (только для общего развития и понимания где и насколько я дурак), но может кому будет интересно поковырять или на будущее как пример тестового задания (тут я ступил ибо знаний у меня не хватает - искал-то на интерна, а не джуниора).Ответы на 1,2 и 3 могу скинуть или пообсуждать.
>>1551136Вот как-то такCREATE PROCEDURE test @date_1 date, @date_2 date, @group_ varchar(10) AS SELECT Продажи.день, Магазин.имя, Группа_товаров.имя, SUM(Продажи.день\Продажи.ндс100) AS Доля.продаж.ндсFROM ПродажиJOIN Магазин ON Продажи.магазин_id = Магазин.idJOIN Товар ON Продажи.товар_id = Товар.idJOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.idWHERE Продажи.день BETWEEN date_1 and date_2GROUP BY Продажи.день,Продажи.ндс Магазин.имя, Группа_товаров.имяHAVING Группа_товаров.имя=group_ORDER BY SUM(Продажи.день\Продажи.ндс100)EXECUTE test(date_1,date_2,group_)
>>1551262а ещё звёздочка в сумме проебалась. хотя не уверен что сумма вобще там нужна в таком виде, но похуй пляшем, суть я думаю понятна
Есть две таблицы:main:___________________| PROD | LIST_ID |-------------------------- | a | 3 |--------------------------| a | 4 |--------------------------| b | 1 |--------------------------list:___________________| ID | LIST_VAL |---------------------------| 1 | 11 |---------------------------| 2 | 22 |---------------------------| 3 | 33 |---------------------------| 4 | 44 |---------------------------Нужно взять все строки из list и соединить их с каждой строкой из main (по полям main.LIST_ID и list.ID) и получить следующее:______________________________| PROD | LIST_ID | LIST_VAL |-------------------------------------- | a | 1 | null |--------------------------------------| a | 2 | null |--------------------------------------| a | 3 | 33 |--------------------------------------| a | 4 | 44 |--------------------------------------| b | 1 | 11 |--------------------------------------| b | 2 | null |--------------------------------------| b | 3 | null |--------------------------------------| b | 4 | null |--------------------------------------Пробовал LEFT JOIN, но так он не все строки дает (те что с null'ами не выдает)
>>1551260Процедура итак выводит данные о продажах, каждая строка выводит данные о продаже: дата, магазин (в контексте задания - Аптека), касса, наименование товара, количество, группа товара, цена с/без НДС, маржа etc и в конечном итоге сколько вместе с НДС было получено за эту продажу (продажа с НДС). Я так понял что требуется чтобы строка выводила ещё за компанию соотношение продажи с НДС с суммарной продажей с НДС за этот день; + соотношение с суммарной продажей в этом магазине; + соотношение с суммарной продажей по этой группе товаров. Ок да, тут я ступил и не уточнил, поэтому два последних вывода (магазин и группа) могут трактоваться и как "за всё время" и, что более вероятно "за сегодня в этом магазине" и "за сегодня в этой группе товаров", но в таком случае первый вывод должен быть "за сегодня продажи с НДС всех групп товаров".
>>1551377> LIST_ID Вместо LIST_ID в последней таблице (с результатом) можно записать просто ID (я неправильно столбец назвал)
>>1551347>вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"> в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателяНу хз, типо как то так, это для дня, по другим по аналогии.CREATE PROCEDURE test @date_1 date, @date_2 date, @group_ varchar(10) ASSELECT Продажи.день, Магазин.имя, Группа_товаров.имя, (SELECT Продажи.день\Продажи.ндс*100 FROM Продажи WHERE Продажи.день= Продажи.Продажи.день) AS Доля.ндс.деньFROM ПродажиJOIN Магазин ON Продажи.магазин_id = Магазин.idJOIN Товар ON Продажи.товар_id = Товар.idJOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.idWHERE Продажи.день BETWEEN date_1 and date_2А может они хотели три таблицы имз процедуры, и груп бай по дню/магазину/группе. И к слову тут уже противоречие, они в процедуру отдают группу и просят по ней выборку, и тут же:>отсортировать выборку по убыванию показателя в каждом дне/магазине/группе товаровЧего блять? Мы хотим получить группу товаров по условию задачи, это изи GROUP BY , без вариантов, а потом нам ещё высирают пол абзаца условий, которые к групировке не имеют ни какого отношения. Но я б таких пидоров хитровыебаных нахуй слал, непонятно что они в задаче хотят, так это еще на минуточку вакансия начального уровня.
>>1551269А как вообще может получится null, если все возможные значения list.ID(=main.LIST_ID) имеют соответствующее значение LIST_VAL?
>>1551393Сейчас специально на Adventure Work попробовал написать схожий запрос, и упёрся как раз в то о чём я говорил - либо делаем групировку по товарам, либо лепим подзапросами всю эту парашу с ндс. Т.е. либо 3 таблицы с тремя групировками, либо одна с групировкой по группе товаров, и с агрегациями в шапке.
Как в Mysql посчитать count вместе с group by? Нужно именно количество строк в целом, group by использую чтобы удалить дубли при джоине.
>>1550992А в ответ тебе бы сказали "Ты охуел, петюнь, ради твоего сраного ООП головного мозга мы новый топовый 4 головый сервак на голдовых зеонах с 4 терабайтами оперативы покупать не будем, пшёл нахуй." Потому как на ORM подобная бизнес-аналитика примерно в такие системки и выливается, поскольку ни на что сложнее крудов он не заточен.
итак давайте подумаем как сделать последовательность в монгоДБ, без function, и главное атомарное решение с без глюков если это выполняется в 100000000 потоков.мои варианты (но они не атомарны)1) list.insert(i)i.seq = getmax(i=> i.seq) +1update(i)2) i.seq = list.IndexDocumentCount()insert(i)
>>1551643Петр, что вы там кукарекаете? Облака, сервера немодно комерческую тайну у чужого дяди модна?Вынуждены вас расстроить, но расчет НДС стоимостью машинного времени в примерно аналогичную сумму оного НДС нас тоже не устраивает, так что вы по прежнему идете нахуй.
SELECT DISTINCT modelFROM max_priceWHERE price >= ALL (SELECT price FROM max_price)Аноны, я чет не совсем понимаю как вот это работает >= ALLт.е. он сравнивает является ли price больше всех значений в таблице или равно наибольшему значению?
>>1551679Блядь, так засунь в Group By свой айдишник. Тогда количество групп у тебя ровняться количеству строк в таблице, не?
>>1550921 (OP)>-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания>-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурсПрошу дать ответ.
В обще есть такая таблицаФамилия | Год |ЗарплатаИванов | 2017 | 5000Иванов | 2018 | 10000Петров | 2017 | 7000Петров | 2018 | 6000Сидоров | 2017 | 5000Сидоров | 2018 | 6000Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017? Я думал сделать джоин с самим собой, но таблица огромная, примерно на миллион записей(много годов), в общем даже с индексом по фамилии это пиздец долго происходит, можно ли как-нибудь через сделать подзапрос?
В вакансиях просят указать уровень владения sql.Я умею писать процедуры в T-SQL, знаю как работают аналитические ф-ции, могу читать план запросов и немного их оптимизировать. Какой у меня уровень?
>>1552680Нуборешение: заджоинить выборку по 2018 с выборкой по 2017 и вывести записи с нужным условием.
>>1552680>можно ли как-нибудь через сделать подзапрос? Два цте по городу и фамилии >>1552825Вот етот успел вперёд меня. Но, я думаю, что тебе это не поможет.
>>1552820Я тут на тренинги записался, по тамошним критериям:Средний: хорошие теоретические знания, практические навыкиПродвинутый: отличные теоретические знания, практические навыки, опыт работы более 1 года
>>1552884>Common Table ExpressionsБля, чото тоже попробовал не пойму как сделатьWITH Salary_total (Фамилия,Зарплата_2017, Зарплата_2018) AS (SELECT Salary.[Фамилия],(SELECT Salary.[Зарплата]WHERE Salary.[Фамилия]=[Фамилия] and YEAR(Salary.[Год])='2017'),(SELECT Salary.[Зарплата]WHERE Salary.[Фамилия]=[Фамилия] and YEAR(Salary.[Год])='2018')FROM [dbo].[Salary])SELECT*FROM Salary_total
>>1552680В качестве решения не подходит тот факт, что данные за эти года меняться не будут и их можно вынести в отдельные таблицы? Таблица зарплат за 2017. Таблица зарплат из 2018.
>>1552680Вот запрос без Cte:select t.last_namefrom tbl twhere t.year in (2017, 2018)group by t.last_namehaving count(distinct t.year) = 2 -- гарантируем наличие зарплаты у сотрудника и в 2017, и в 2018 годуand max(case when t.year = 2018 then t.salary else 0 end) > max(case when t.year = 2017 then t.salary else 0 end)
Аноны, а какие есть способы горизонтального масштабирования RDMBS? Т. е., например, есть у меня SQL-база, и она уже слишком большая/медленная, а на железном уровне я не могу ни добавить места под базу, ни заменить SSD на более быстрый, но могу добавить новый сервак. Как с минимальными временными затратами выйти из такой ситуации? Считаем, что и база, и запросы уже оптимизированы по-максимуму.
>>1553168Mpp базы данных погугли. Если не брать готовые решения, то некоторые умельцы прикручивали шардирование к postgres. Быстро скорее всего ни как. Только если структура данных позволяет, можно архив отделить, историю, но это не совсем горизонтально. Кратко - суть шардирования, распределять данные в зависимости от значения по разным сервакам.
>>1552998Нет, ты подожди.Допустим, у тебя есть таблица с зарплатами, там 10000 сотрудников (народ приходит и уходит) за 20 лет, в каждому году 12 месяцев, каждый месяц начисляют зп 2 раза (аванс + основа) = итого 10000 20 12 2 = не более 4 800 000 записей. Если это джойнить, то будет просто ахтунг.Ты берёшь и выносишь зарплаты за 2017 в таблицу ЗП2017, а зарплаты за 2018 в таблицу ЗП2018. Теперь у тебя базе данных нет необходимости вычислять значение выражения для джойна для всех вообще записей, а вычислять будет только для тех кто работал в 2017 и 2018. Допустим из фирмы в 2017 и 2018 никто не уходил и не приходил и там работало 1000 человек. 1000 человек 1 год 12 месяцев 2 раза в мес зп = 24000 записи в каждой таблице.Затем, считаешь сколько у кого была зарплата в 2017 и 2018 году. Помещаешь эти данные в таблицы ЗПСУМ2017 и ЗПСУМ2018, соответственно. То есть у тебя в каждой из этих таблиц будет 1000 записей (по числу сотрудников).И пишешь запросSELECT *FROM ЗПСУМ2017JOIN ЗПСУМ2018 ON ЗПСУМ2017.имя = ЗПСУМ2018.имяWHERE ЗПСУМ2018.зп > ЗПСУМ2017.зпЕсли даже движок будет для каждого "имя" из таблицы "..2017" проходить по всем "именам" в таблице "..2018" то это будет всего лишь не более 1 000 000 сравнений, а если ты их ещё и отсортируешь, то будет вообще всё практически мгновенно. Сорян, за ключи не поясню, ибо не шарю в них.Ну как вам такое, илоны маски?Профессионалы, обоссыте если я хуеты написал, главно не бейте.
>>1553214Ну это говно и палки, куча лишних таблиц, куча лишних преобразований. А если у него доля записнй 2017-2018 высокая? Вон там выше анон изящный ответ зухярил
>>1552680>В обще есть такая таблица.>Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017?>в общем даже с индексом по фамилии это пиздец долго происходит.Не знаю зачем, но я сделал зачем-то пример реализации вообще без движка базы данных.Возвращается такой файл :Фамилия | Год | ЗарплатаИванов | 2017 | 5000Иванов | 2018 | 10000Сидоров | 2017 | 5000Сидоров | 2018 | 6000Option Explicit'Программа делает выборку из строки файла с таблицей (первый параметр функции "Выбрать")'двух указанных лет (второй и четвёртый параметры функции), для которых зарплата либо'увеличивалась, либо уменьшалась, либо не менялась (третий параметрй функции)'и записывает результирующюю строку с выбранной таблицей в другой файл.'Настройки : 'Путь к файлу исходной таблицы : Private Const ПуФаIN As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Таблица.txt" 'Путь к файлу результирующей таблицы : Private Const ПуФаOUT As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Результат.txt" 'Первый год для выборки : Private Const Год_1 As String = "2017" 'Второй год для выборки : Private Const Год_2 As String = "2018" 'Разделитель между записями : Private Const RZ As String = vbCrLf 'Разделитель между полями : Private Const RP As String = " | "'-------------Private Type Год 'структура таблицы определённого года ZP As Long 'зарплата LФ As Integer 'длина фамилии Ф As String 'фамилияEnd TypePrivate Sub Command1_Click() 'Сделать выборку в файл Dim A As String, nF As Integer 'Прочитать файл исходной таблицы в строку : If Len(Dir(ПуФаIN, vbNormal)) Then 'если файл существует nF = FreeFile 'присвоить идентификатору файла свободный номер Open ПуФаIN For Binary Access Read As #nF 'открыть файл A = Space(LOF(nF)): Get #nF, , A 'читать файл в строку Close #nF 'закрыть файл Else Call MsgBox("Файл :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не найден."): End End If '----------------------------------------------- 'Получить строку файла с записями двух указанных лет : A = Выбрать(A, Год_1, "<", Год_2) If Len(A) = 0 Then 'если функция вернула пустую строку Call MsgBox("Исходный файл повреждён."): End End If '----------------------------------------------------------- 'Записать результирующий файл таблицы с выбранными записями : Dim B As String: B = Left(ПуФаOUT, InStrRev(ПуФаOUT, "\") - 1) 'директория файла назначения If Len(Dir(B, vbDirectory)) Then 'если директория назначения существует If Len(Dir(ПуФаOUT, vbNormal)) Then 'если файл уже существует If FileLen(ПуФаOUT) > Len(A) Then 'если файл больше, чем длина записи nF = FreeFile: Open ПуФаOUT For Output As #nF: Close #nF 'стереть файл End If End If nF = FreeFile 'присвоить идентификатору файла свободный номер Open ПуФаOUT For Binary Access Write As #nF 'открыть файл Put #nF, , A 'записать строку в файл Close #nF 'закрыть файл Else Call MsgBox("Директория :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не существует.") End End If '---------------------------------------------------------------------- Call MsgBox("Выполнено."): EndEnd Sub'Возвращает строку файла с записями двух лет :Private Function Выбрать(Табл_IN As String, Год1 As String, Соотношение As String, Год2 As String) As String 'Табл_IN - строка, в которой записан исходный файл таблицы 'Соотношение(зарплат) - ">", "<", "=" между первым и вторым заданным годом Dim Г17() As Год, Г18() As Год, LГ17 As Long, LГ18 As Long 'таблицы за 17 и 18 год Dim A As String, mA() As String, LmA As Long, mB() As String, mD() As String, k As Long, g As Long, q As Long 'Разделить исходную таблицу на записи : If InStr(Табл_IN, RZ) < 1 Then 'если в файле нет разделителя полей Exit Function End If mA() = Split(Табл_IN, RZ): LmA = UBound(mA()) '------------------------------------------- 'Создать две таблицы за 1 и 2 год : ReDim Г17(LmA) As Год: ReDim Г18(LmA) As Год For k = 0 To LmA If Len(mA(k)) Then 'для не пустых строк If InStr(mA(k), RP) < 1 Then 'если в записи нет разделителя Exit Function End If mB() = Split(mA(k), RP) If UBound(mB()) < 2 Then 'если в записи отсутствует поле Exit Function End If If mB(1) = Год1 Then With Г17(LГ17): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ17 = LГ17 + 1 ElseIf mB(1) = Год2 Then With Г18(LГ18): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ18 = LГ18 + 1 End If End If Next k '------------------------------------ 'Создать результирующую таблицу : A = mA(0): ReDim mA(LГ17 + LГ18) As String: mA(0) = A 'записать "шапку" LГ17 = LГ17 - 1: LГ18 = LГ18 - 1: ReDim Preserve Г17(LГ17) As Год: ReDim Preserve Г18(LГ18) As Год ReDim mB(2) As String: ReDim mD(2) As String: mB(1) = Год1: mD(1) = Год2 If Соотношение = "<" Then 'если надо для увеличивающейся зарплаты For k = 0 To LГ17 'для каждой записи в таблице за 17 год With Г17(k) For g = 0 To LГ18 'перебрать все записи в таблице за 18 год If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии) If .ZP < Г18(g).ZP Then 'если зарплата в 18 году больше, чем в 17 'Сделать две записи(за 17 и 18 год) в результирующую таблицу : mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP) q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP) '-------------------------------------------------------------------- Exit For 'другие записи в таблице 18 года не проверять End If End If End If Next g End With DoEvents 'передать управление другим процессам в системе Next k ElseIf Соотношение = ">" Then 'если надо для уменьшающейся зарплаты For k = 0 To LГ17 'для каждой записи в таблице за 17 год With Г17(k) For g = 0 To LГ18 'перебрать все записи в таблице за 18 год If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии) If .ZP > Г18(g).ZP Then 'если зарплата в 18 году меньше, чем в 17 'Сделать две записи(за 17 и 18 год) в результирующую таблицу : mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP) q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP) '-------------------------------------------------------------------- Exit For 'другие записи в таблице 18 года не проверять End If End If End If Next g End With DoEvents 'передать управление другим процессам в системе Next k Else 'если надо для не изменившейся зарплаты For k = 0 To LГ17 'для каждой записи в таблице за 17 год With Г17(k) For g = 0 To LГ18 'перебрать все записи в таблице за 18 год If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии) If .ZP = Г18(g).ZP Then 'если зарплата не менялась 'Сделать две записи(за 17 и 18 год) в результирующую таблицу : mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP) q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP) '-------------------------------------------------------------------- Exit For 'другие записи в таблице 18 года не проверять End If End If End If Next g End With DoEvents 'передать управление другим процессам в системе Next k End If ReDim Preserve mA(q) As String: Выбрать = Join(mA(), RZ) '------------------------------------End Function
>>1553792Тогда есть опыт 3+ лет с минимум одним законченным крупным проектом с и использованием ключевых навыков?
>>1550921 (OP)MS SQLВ таблицу добавил новое поле "Genre", оно не должно быть нуллом, но только в EDIT нет колонки Genre, что делать?
>>1554516Да, сори что заспамил.Ну заодно спрошу, чё с вопросиками делать? Когда ручками пишу запросы, кодировка сломана
>>1554517Collation поменять на кириллицу, если еще не поменял.И инсертить в nvarchar-колонку надо не'Говно', А N'Говно'
Вот у меня например после джоина таблицы с самой собой такая хуйня вылезает, казалось бы сделать GROUP BY по имени чтобы убрать повторы, но тогда salary_2017 становится NULL, как сделать чтобы salary_2017 остался не нулл? Нагуглил GROUP BY COALESCE, но он все равно оставляет один NULL.
>>1555303Всем спасибо, хуйнул SUM в селекте, все норм стало. Нате трекич.https://www.youtube.com/watch?v=U02mGktc7aA
Уникальные ID не надо делать? Вот как мне связь многим ко многим правильно тогда реализовать. Книги и покупатели. По какому общему признаку вообще можно их джойнить?
>>1555495У тебя ещё одной таблицы не хватает, с заказами, которое и сводит вместе покупателя и товар.
>>1555555Ты гет взял. Спасибо, а то я видимо неправильно связал, у меня была 3тья таблица, не понял чё с ней делать
>>1555578>>1555584Лол, не понял с начала и потом не понял. Ну раз у нас гет в тхреде, щас заживем, за неделю будем в бамплимит улетать.
>>1555584Ну смотри, чтобы связать список книг и список покупателей, тебе нужно как-то указать кто какие книги купил. Можно , конечно, в списке покупателей каждому покупателю добавить список книг которые он купил (и каждой книге - купивших её покупателей). Но несложно догадаться, что это не кошерно. Поэтому умные люди придумали делать таблицу, фиксирующую покупку - ид_покупки, ид_покупателя, ид_книг etc - и вот она связь многие ко многим посредством ещё одной таблицы.Подробнее погугли «нормальные формы» вроде как
Как работает TOP? Допустим у меня несортированая таблица, делаю простой селект с топом, что произойдет?1) Достанет всю таблицу, и отдаст мне 10 строк2) Посмотрит 10 строк, а остальное смотреть не будет
>>1557070А так ли это важно с учётом того, что в MySQL есть кеширование. Пока таблица, к которой ты делаешь запрос, не изменилась, ты будешь получать результат SELECT-а мгновенно из кеша.
Сап. Не нашёл треда по NoSQL, извиняйте.Посоветуйте минимальную NoSQL-БД для докера с джава-клиентом, оптимизированную на быструю вставку огромного количества жсон-объектов размером около 1кб в минифицированном виде. Из операций требуются "взять N объектов" (не обязательно упорядоченно, но желательно самых старых) и "удалить N объектов по ключам".Раньше был постгрес с хранением по столбцам, но чувствуется как оверкилл для микросервиса для приёма данных. И схему БД синхронизировать в нескольких местах сразу желания мало. Можно его, конечно, и жсоном кормить, но такое.Попробовал использовать Redis с lettuce-клиентом, но тот захлёбывается во время сериализации - клиент жрёт только строки в качестве значений, а потому с каждым объектом сборщик мусора начинает умирать быстрее и быстрее. Ну и сохранность данных в кэш-базе - тема сомнительная.Или смотреть вообще в другую сторону, какие-нибудь timeseries-базы?
>>1557461МонгоДБ не подходит?Алсо, если у тебя высокая нагрузка, может не менять базы, а использовать решения для балансировки нагрузки?
>>1557461Можно попробовать кафку как персистентное хранилище юзать.Cassandra вроде как на запись быстрая, но не "минимальная"
>>1557834Суть именно в том, что один бэк совмещается с одной БД - нужен масштабируемый сервис-приёмник-данных. При увеличении нагрузки план в масштабировании всего сервиса, а не только базы. Монго - очень уж жирная, 150 МБ образ (alpine, видимо, для слабых), тонны коллекций, вот это всё. Редис привлекал именно свой минималистичностью.>>1557834>>1558199Попробовал, всё же, постгрес с таблицей "id bigint, data json". Внезапно, производительность оказалась очень даже ничего, хотя и ощущается как тот ещё оверкилл (целый постгрес тянуть-то). С учётом дедлайнов придётся (по крайней мере, пока что) остановиться на таком решении. Не совсем понимаю, почему сборщик мусора не орёт из-за тонн сериализованных строк, но, видимо, lettuce - совсем ущербный клиент/драйвер.В общем, вопрос пока что закрыт, но, в будущем, может открыться вновь.
>>1559284Конечно, ты охуел, это же говно какое-то. Еще и в книжке какой-то написано. Предлагаю такой вариант, который то же самое достанет, только записано короче и работает быстрее.Select distinct C.CustomerId, c.CustFirstName, c.CustLastNameFrom Orders oInner join Order_Details od on o.OrderNumber=od.OrderNumberInner join Products p on od.ProductNumber=p.ProductNumberInner join Customers c on o.CustomerId=c.CustomerIdWhere p.ProductName in (‘govno’, ‘govno2’, ‘govno3’, ‘govno4’)
>>1559419Ну я дибиловат>>1559513Нет твой запрос достанет клиентов купивших один из четырёх, а нужно клиента купившего все четыре
>>1559522Да пфф, прост не заметил, особо много не поменяетсяSelect C.CustomerId, c.CustFirstName, c.CustLastNameFrom Orders oInner join Order_Details od on o.OrderNumber=od.OrderNumberInner join Products p on od.ProductNumber=p.ProductNumberInner join Customers c on o.CustomerId=c.CustomerIdWhere p.ProductName in (‘govno’, ‘govno2’, ‘govno3’, ‘govno4’)Group by C.CustomerId, c.CustFirstName, c.CustLastNameHaving count(distinct p.ProductName)=4
>>1560050А что поменялось то? IN же же ОДИН ИЗ. У тебя по прежнему вернёт тех кто просто купил одно их говен. А надо вернуть тех кто купил все четыре говна за раз.>>1560009Ну там в книжке есть ещё один вариант решения, покороче, и вроде как попроизводителней.
>>1560050Лучше сначала group by, чтобы join легче был.>>1560064>А что поменялось то?having, который оставляет только CustomerId с 4 разными ProductName.
>>1560064Хм да, впринципе разумно. Сначало хотел возразить что товаров то больше, но мы же их отфильтровали. блять а зачем эти пидоры тогда воротят это говно на три абзаца с жоинами
>>1560071Потому что having не использует индексы, так что может быть вопрос в производительности.Но даже если нужно использовать индексы, то лучше юзать Where exists and existsAnd existsAnd existsДля каждого из 4 продуктов, чем тот калл с джойнами. Советую сменить книжку.
>>1560066>лучше сначалаДвачую.Я еще иногда пишу Group by только по c.CustomerIdА все остальное запихиваю в max:SelectC.CustomerId,Max(c.CuatomerFirstName),Max(c.CustomerLastName)From ...Group by c.CustomerId
>>1560081Это просто агрегирующая функция, которую можно к строкам применять - максимум.Можно min написать, результат такой же будет.Она нужна, чтобы не группировать по имени и фамилии записи, они все равно по айдишнику клиента группируются.
Вот это ORACLE мощная.Время в секундах среднее на различные count() в таблице от 0 до 10кк записей с шагом в 1к, (981 итерация)
>>1563202Я б посмотрел статистику по другим запросам. И вобще чот прохладная история, малоинформативно.
>>1563384Да ладно, общеизвестнй факт, что оракл круче MS и My тем более.Просто нужно иметь в виду, что она и дороже, и жрет больше, и сопровождается хуевее. Я не фанат, между прочим, считаю говном оракл, но это известный факт, что он эти субд ебет в сраку, поэтому в банках всяких тока его и юзают.
>>1563431Да я не против но от таблицы попахивает пиздежом, 0,001 на всех запросах, в то время как у конкурентов аремя разное. Либо там кэширование какое-то, либо условия разные.
>>1563438>ScylladbПервый раз про такое слышу. ПРедставим, что ты IT-директор и принимаешь решение использовать небесную-лабораторию-баз-данных. У тебя есть 2 чела, которые умеют ее админить и юзать. Через месяц их хантят и зовут на другой проект, где обещают столько денег, сколько ты им никогда дать не сможешь.Как быстро ты найдешь спеца по такой штуке?Вообще, вижу, очень популярная штука, судя по пикрилу с hh, явно стоит того, чтобы потратить свое время на ее изучение.
>>1563470Ну типо каунт у них ахуенный да, ну вставляет хуже пеонов. Да и третей базой хотя бы марию нужно.
>>1563202ебани свой оракул в такой бенчмаркhttps://tech.marksblogg.com/benchmarks.htmlпосмотрим, как он соснёт
>>1563605а каунты фулсканом из >>1563202для каких бд ёбта?в обоих тестах каунтыУ верхнего дебича еще сетап не указан. Что там и как, какие железки. У MS SQL колумн стор применён?Вообще фул скан это чисто для аналитических бд. Макака выбрала какие-то дрищ базы устаревшие. Для таких задач используются движки из моей ссылки. А Оракул сосёт там. Это олтп база.
>>1563603в каких файлах, дебич?он просто пример привёл размера в коммон форматетам если на любой тест тыкнуть, написано, как он данные в базу загружает
>>1564521В этом условии, получается он не выведет записи, в которых есть что-то помимо цифр? А это можно без отрицания сделать?
Ребятки, короче, пошел после универа на галеру, а тут вместо божественного MS SQL Server заставляют на PostgreSQL хуячить. И не то чтобы с этим проблемы, но блядь, я что-то не нашел где посмотреть диаграмку баз данных, а эта хуйня в БД с парой сотен таблиц очень выручала у SQL Server'а. Короче, может быть я тупой, но если этого нет из коробки, то как быстро получить эту самую диаграмму?
>>1564521В документации к своей СУБД.>>1564523Нет, все строки в которых есть подстрока [^0-9]>>1564759> Вобще все в один голос кричат что LIKE говно конструкцияЧто? Где?
>>1564918Он к Муське не подключается, потому что он написан на джаве, а там через jdbc он у нее не понимает timezone, надо в самой субд UTC+3 прописать, это можно несколькими способами сделать.
>>1564959Я слышал мнение что лайком любую более-менее большую базу можно поставить раком. К слову лучше использовать LEFT, вместо ^
>>1565833Ну может из очевидного что-то, типа FK не в ту сторону или тип text вместо какого-то более подходящего для строк с именами и названиями.Я нуфак совсем, первую свою БД проектирую.
>>1553164Возник еще вопрос, если нужно вывести зарплату каждого за 2017 и 2018, и гарантировать что они были, что делать? Вот я добавил group by t.last_name, year чтобы были оба, но тогда having count уже не срабатывает, и вылезают сотрудники которые скажем в 2018 уже NULL, как быть?
Видел что иногда используют ?, для подстановки, как правильно называется чтоб можно было почитать по этому вопросу?
>>1565808Ты в чем такую хуевину сделал?Аноны, а не подскажете, Postgres много ресурсов системы жрет? (Винда)
>>1567171да образные 100 метров оперативы. Много если начинаешь работать с базой делать боьлшие инсерты\селекты\итд.
>>1567197https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms141696(v=sql.105)?redirectedfrom=MSDNСмотри где "Specifying Parameters by Using Ordinal Positions"
Сап сиквелач. Хочу сделать запрос к таблице с полями, например, "имя студента", "concat("имя препода", "фамилия препода"), "название урока", "дата проведения" с GROUP BY date, name такой, чтобы если в это время урок случился всего один, то вывести его название, а если их несколько, то вывести строку типа "произошло несколько уроков". HAVING COUNT(date) не помогает, так как все остальные поля не попадают в агрегирующие функции. Если же сделать так, чтоб попадали, то запрос перестаёт работать
>>1567880Спасибо сосач, я решил эту проблему, сделав тупо SELECT name, MAX(prepod), MAX(urok), date ... GROUP BY date, name HAVING COUNT(urok) = 1 UNION SELECT name, MAX(prepod), 'penis', date ... GROUP BY date, name HAVING COUNT(urok) > 1
Здравствуйте, уважаемые.Подскажите, хули так процессов Postgres'a много висит.И че теперь pgAdmin только веб морда? Десктоп приложением для винды не пользуется уже никто?
>>1568180>И че теперь pgAdmin только веб морда?Морда, которую мы заслужили. А вот нехуй было сливать индустрию обоссаным веб-дебилоперам, скоро клиенты всего только в виде вебморд будут.
>>1567000Select* From (Selectt.last_name, max(case when t.year = 2017 then t.salary else null end) as salary_2017, max(case when t.year = 2018 then t.salary else null end) as salary_2018From tbl tWhere t.year in (2017, 2018)Group by t.last_name) tWhere t.salary_2017 is not null and t.salary_2018 is not null
Накидайте каких-нибудь сложных задачек на оракл скуль или просто вопросиков, которые вас интересуют, с радостью отвечу. Акцентирую внимание на том, что я большой профессионал только в оракле, с остальными бд работал очень мало.
Аноны, в какой-нибудь субдпараше есть встроенный скалярный MAX() ? Чтобы сразу из коробки ебашить запросы типа select max(10,20,30;
Стыдно признаться, аноны, но я только сейчас узнал про SELECT ... FOR UPDATEЕбаный стыд, я всегда думал что транзакция сама всё что надо залочит. Какой же я был тупой.Умоляю, аноны, не повторяйте моей ошибки. Прежде чем написать BEGIN в своём скрипте, обязательно прочитайте это:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.htmlпросто отложите все свои дела и прочитайте и только потом уже программируйте. Не будьте как я.
>>1570138Для белых людей ORM всё это делает за них, в коде пишется только `.update(status: :completed)`.
А из mysql анонимного пользователя удалили чтоли? Раньше же был, если в имени ''@'%' пустые кавычки указывать.
Вот я попалЖиву в МосквеЗнакомые зная Sql на уровне больших запросов (без кодинга) зарабатывают 120-150 на рукиЯ же получал мало и решил сменить работу.Вроде знаю Sql получше них и тут жопа, за 10 собесов все отказы,прошу всего 120.В одних местах на 120к хотят знания select * from, В других задание с пика.То и то решаю, но отказы, че делать, хз
>>1572397А как понять, что от тебя хотят в задании?Я запрос мб и написал бы, но че-то в логику не въезжаю. Если расскажете, напишу вам запрос.
>>1572420А понялSelectMin(t.id) as min_id, max(t.id) as max_idFrom (Selectt, sum(t.is_chain) over (order by t.id) as group_numFrom (select k.id,Case when Lag(k.id) over (order by k.id) = k.id - 1 then 0 else 1 end as is_chainFrom kall k) t) tGroup by group_numТакие дела, это вам не сиськи мять
>>1572426Быстро тыЕсли правильно, то ты молодецЯ сидел почти весь день с ним и не мог доперетьТвой метод попробую для себя разобрать, как доберусь до базы
>>1572383>>1572426Для себя сделал вывод: плохо не знать хотя бы в теории какие есть в mysql функции и что они делают.
>>1572383Я что-то тоже втыкаю уже минуты три.Что они хочет?>максимальное и минимальное значение группыЧего блять? Как это к примеру относится?
>>1572967Глупенький, там идут числа по порядку, но в некоторых местах порядок нарушается. Пока порядок не нарушен, это группа. Если после числа не идет следующее по порядку число, то он одиночка в своей собственной группе.
Есть две таблицы, writers (id) и books (writer_id, publication_year). Связь один-ко-многим. Столбец publication_year может содержать одно из 50 значений от 1970 до 2019. Как из этих данных узнать, сколько авторов издали свою первую книгу в каждом из обозначенных годов?
Всем привет!Анончики наверно не совсем по тематике, появилась необходимость автоматизировать работу, сменив эксельку на что то более гибкое. с чего начать? где искать специалиста который занимается разработкой ПО, сколько это может стоить? ( усредненно) Сейчас работаю в эксель +DataExpress, но знаний чтобы допилить и сделать все в одном месте не хватает.
>>1573954> сменив эксельку на что то более гибкое. с чего начать?С изучения питончика.> где искать специалиста который занимается разработкой ПОНа хх.ру. Или фл.ру.> сколько это может стоить? ( усредненно) 100.
>>1573973я не планирую сам делать программу, просто нужно найти кого то умеет. на удаленную работу. Спасибо попробую покурить сайты
>>1573942Ему не первый год для каждого автора, ему надо publication_year, count(writer_id) ... group by publication_year
>>1573979Тоже мимо.>сколько авторов издали свою первую книгу в каждом из обозначенных годовЗначит, надоSELECT y, count(id) FROM ( SELECT writers.id, MIN(publication_year) as y FROM books JOIN writers ON books.writer_id = writers.id GROUP BY writer_id) bGROUP BY y;
>>1550921 (OP)Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гугле
>>1575437Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гуглеТак более читаемо
>>1575441Пиздос, я всегда удаляю затираю данные редактированием, а в сервисах, написанных вот такими петухами, предыдущее значение навсегда останется.
>>1575601>Петухи пишут сервис>Ой, кто там в системе поменял значение? Какое вчера было в системе?>Сейчас посмотрю, скажу>Сервис пишет мастер баз данных из /pr, который всех называет петухами и не соблюдает принципов историчности>Ой, ГАЛЯ, кто там поменял значение? Какое вчера было в системе?>Сейчас, надо восстановить бэкап базы, сейчас-сейчас, попредолимся пару часов, ой, ай, бэкап только на 23:00>Жидко пернув, увольняется и идет искать новое место, где не будут предъявлять какие-то непонятные требования, типа ИСТОРИЧНОСТИ к его системам
>>1575634Нормальные люди пишут при необходимости хранить ИСТОРИЮ пихают логи изменений в какой-нибудь эластик, а не засирают этим говном базу.
>>1575662Ну конечно, нормальные люди только так и делают. Ты в каждый проект еластик пихаешь? Дай угадаю, ты из тех, кто без еластика/докера/нод жс/монго и пр. работать не умеет, да?Потом очень удобно все это поддерживать.>а не засирают этим говном базу.Бедненький, не можешь запрос написать, который последнюю строчку достает?Вот здорово было бы, если бы в базе данных одна табличка была с одной колонкой и одной строчкойБаза: DataDbТаблица: DataКолнока: ValueТип данных - jsonНу ничего, научишься, там, глядишь, и на повышение пойдешь.
>>1575782Анализом данных, больше всего это похоже на статистику. К базам данных отношение имеет лишь косвенное.
Парни, глупый вопрос, но будьте добры помочь. Требуется хранить файл и его хеши. Хэшей тысячи и не всегда (а может и часто для некоторых) их значение известно. Как лучше реализовать - одна общая таблица со всеми мысленными и немысленными хешами(и половина таблицы тупо null) или дохрена таблиц вида id -> hash_value, но уже без null?Лучше на стыке расширяемости, скорости и более-менее несложности кода. Спасибо заранее.
>>1576001>одна общая таблица со всеми мысленными и немысленными хешамиНу давай разбирать по частям тобою написанное. Если твои хэши — это CRC32, то каждый из них занимает 32 бита, а возможных вариантов 232, т.е. пустая таблица всех значений займет 16 ГБ. Если же хэши, например, sha256, то каждый занимает 256 бит, а возможных вариантов 2256, тогда пустая таблица таких значений займет 70-значное число ГБ. Дисками уже закупился?
На сколько я знаю VARCHAR места не занимает, если в нем нет данных. Да и вообще любое поле не занимает места на диске, если оно NULL. Создатели движков БД не идиоты ведь.
Здравствуйте, как реализовать стоимость по дням недели и праздникам ? Например,жилье на турбазе стоит 1000 р. по будням, в выходные 1500, на праздники другая цена. А если вообще не сезон скидку сделать.
>>1577712Я бы на твоем месте копнул в сторону как вообще реализуются скидки. Мне кажется это уже на столько заезженная тема, что по ней есть бест практики на любой вкус.
>>1578016Ага, а завтра у тебя с понедельника по четверг стоит 100 р, в пятницу 150, а выхи 300, как будешь делать?
>>1578043Раз уж цена меняется по желанию левой пятки, то только так:id | product_id | date | priceА на уровне логики каждый раз инсертить по несколько записей на будущее.
>>1578084Тогда можно сделать start_date и end_date.Правда, вопрос в том, как сделать диапазоны непересекающимися. Можно написать тупой триггер, находящий самую близкую дату и чекающий, что всё норм.Ещё вариант - только одно поле с датой, означающее "начиная с такой-то даты цена такая".
>>1578093>Начиная с какой датыbest вариант, обеспечивает и гибкость, и гарантирует, что не будет пересекающихся диапазонов.
>>1575437Таблица называется полносрезной.Способ хранения - сырые не нормализованные данные. Есть куча способов, например ты можешь просто добавить столбец с датой загрузки, есть что-то похитрее. https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE_%D0%BC%D0%B5%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D0%B5%D1%81%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D1%8F. В основном об этом говорят, когда речь идёт о всяких больших данныхНо всё это довольно элементарно какие нахуй книжки, лол? мимо инженер данных
>>1580220> https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE_%D0%BC%D0%B5%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D0%B5%D1%81%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D1%8F.https://en.wikipedia.org/wiki/Slowly_changing_dimension
>>1580223Инженер больших данных, у вас спойлеры фрагментировались по всем постам, срочно пересоберите свой текст.
давай те БД для файловчто нужно 1) инсерт и гет по id 2) автобалансровка , типо заканчивается место , добавляю еще компьютер и всё само настраивается 3) поддержка стриминга , типо могу в вебе перематывать
>>1575662Тебе могут быть нужны старые данные не только на случай когда надо что-то срочно посмотреть, а как часть бизнес-логики приложения.
Привет всем.1)Итак нужна БД ключ значение подойдет 2) будет 1 таблица , инсерт и get по id 3) Любая скажите ? а хуй там вот такое требование Нужна БД которое займет минимально диска. Попробовал совета одного "топ программиста" монгоДБ , размер чуть ли не в 3 раза больше стал чем данные лежали в .txt
>>1581910>будет 1 таблица , инсерт и get по idа чем собственно .txt файлы не устраивали? их можно гитом бэкапить, очень удобно
>>1581957getby id нельзя сделать , точнее нужно это делать моментально . писать код свой не хочу >>1581913давай свои идентификаторы , если выйдет на х2 больше , чтобы мог тебя обосать
>>1581973>нужно это делать моментальномоментально это сколько мс? если у тебя данных не дохуища, а в пределах гига, создай раздел в оперативке (tmpfs) и храни этот файл там. скорость такая будет, что ты охуеешь. если хочешь, чтобы знакомые "топ программисты" не кекали от реализации, замени файл на memcached или redis. запомни главное: соединяться с хранилкой ты должен не по сети, а через сокет. преобразование данных в пакеты и обратно - это такой тупейшний оверхед, что остальное уже не имеет значения.
>>1581982шот гуглица только ктатащина , нету мануалов на не узбекском языке, и .тд.>>158199421 тбдальше первого предложения не читал
>>158233421 терабайт. В .txt.А вы знаете толк, мсье.Бтв любая база займет ощутимо больше места из-за организации хранения информации. Типа
Привет, гайз. У меня тут появилась нужда сделать так, чтобы при помощи SQL процедуры как-то на удалённой машине вызвать завершение определённого процесса в Windows (ну или хотя запустить скрипт уже на компе, который сам это сделает, не суть). Но за часы гуглинга я так ничего и не нашёл, а мне очень надо доделать этот проект на работе.
>>1582515Тьфу, случайно отправил, не дописав. Так вот, может есть какие-то возможные способы такое провернуть? Или костыли? Суть в том, что есть процедура, которая проводит некоторые проверки, и при условии, что некоторый параметр = true, то надо убить процесс на компе, который стриггерил процедуру. Вот примерно так.
>>1582635А какое решение ты можешь предложить для развёртывания? Смотри. Есть комп, на котором триггерится прожка на С#, которая при определённых условиях блочит его полностью. Я делаю решение, которое позволит ответственному человеку разблокировать комп, введя логин и пароль. Проблема в том, как загасить процесс программы на С#, используя SQL и какие-то может быть костыли?
>>1582649Ну пускай твоя шарповная прога после блокировки компа начинает раз в пять секунд селектить табличку (например: id, user, time) и разблокировывать компутатор, а твой мальчик будет дергать процедуру, которая делает запись в эту табличку, права на нее дай только ему.
>>1582334> 21 тбСомневаюсь, что всеми этими данными пользуются каждый день. Наверняка их можно разбить по годам по разным базам и какие-то базы положить на ssd, а какие-то на обычные диски.
>>1582690каждый день. все данные задействованы >>1582434понятное дело что займет более , в том и вопрос какая минимально >>1582536незя, нужен поиск (читай начальный вопрос)
>>1582741Тогда делай свои индексы, раз тебе нужно минимум места и поиск реализовать.Хотя можно попробовать покурить оракловые exteral table и их аналоги. Поиск есть, модификация данных есть, место займут только те табличные пространства, которые нужны для работы базы(относительно твоего объема - мизер).Не та скорость, конечно, но твоим требованиям отвечает.Как вообще такой монстр у тебя получился?
>>1582741>незя, нужен поиск (читай начальный вопрос)полуркай технологии яндекса типа clickhouse, возможно решает эту задачу. алсо, в /s спрашивал?
У меня есть питоновский скрипт. Он циклом обрабатывает куски данных и базы данных монгодб. Скрипт делает одно и тоже. Разница лишь в том что в тестовой бд 8 дней данных а в полной бд полтора года. Но суть сортировки одинаковая. На тестовой базе данных 8.5mb 100.000 строк Время выполнения цикла меньше 1 секундыНа полной базе данных 215mb 2.5млн строкВремя выполнения почти 5 секундПочему такая разница и что мне сделать чтобы сократить время? Я ньюфаг, просьба не ругайте.
>>1583475>на тесте мало строк>на проде много>что не так?Всё так, хотя, ты скриптом обсчитываешь порции данных, а не весь набор разом, и у тебя хорошие диски и много оперативы, можешь в несколько потоков одновременно запускать свой скрипт на разные порции.
>>1583528Вот только я не пойму. Он берет одинаковый кусок в обоих случаях. И в обоих случаях этот кусок находится в самом начале бд. А разница получается от 0.4 сек до 4.5сек. Хотя всё идентично. Я бы еде понял, если бы скорость выполнения возрастала к моменту продвижения от начала базы, дак нет, она с самого начала низкая становится.
>>1583805А, у тебя на одной порции данных скорость разная. Ты об этом не говорил.Если бд на одном серваке лежат или на разных, но с одинаковой конфигурацией, то проблема скорее всего в запросе, не спец по монге, но мб там достаешь что-то не по ключу? Или по ключу, но индексы фрагментированы? Мб проблема в сети между тестом и продом, если они в разных местах находятсяМб вообще запрос работает одинакого, а питонский скрипт по обработе - по разному. Посмотри, сколько выбор именно занимает.
>>1583824Эх, я же ньюфаня и ни одного твоего слова не понял. Но я посидел и подумал. Я делаю выборку по времени. И даю команду выбирать. И он выбирает, но пробегает по всей БД, проверяет все строки на соответствие моему запросу. И если это так, то в чем преимущество баз данных? У меня получается как бы, какой-то построчный парсинг текстового файла. И я думал что бд как раз существуют чтобы этого избегать.
>>1584042У тебя БД - объектная - MongoDB, Она предназначена для того, чтобы доаставать данные по ключу. У тебя ключ - это день?Ебаный рот, вообще, покажи код, которым ты из монги достаешь инфу, а то пока что все выглядит так, что ты ждешь какой-то магии, а ее не случается.>Построчный парсинг текстового файлаПока так и выглядит.
Написать SQL запрос, который считает кол-во дублирующихся строк в любой таблице (строки считаются дублирующимися если для каждой колонки их значения равны, кол-во колонок мы не знаем, но скрипт должен отрабатывать на любой таблице). Запрос можно писать для любой СУБД на ваш выбор. -------------------------------------------------------Пацаны,спасайте,как так сделать?
>>1584210Вижу там только поиск дубликатов по полям конкретной таблицы, это я и сам могу сделать. Но задача в том,чтобы это работало для любой таблицы. Или я в глаза ебусь и не вижу решения,ткни носом,пожалуйста
>>1584200Тебе надо оптимальный вариант или хоть какой-то?select count(★) - (select count (★) from(select distinct ★ from table)) from tableТакое ебаклакство с подзапросом из-за того, что count(distinct ★), вроде, не работает. А если работает - так ещё проще: count(★) - count(distinct ★).
>>1584200Вот ответ для MS SQL сервер на основе метаданных и динамического sql. Нужно тока любую табличку записать в переменнуюDECLARE @tbl_name sysname = 't_govno'DECLARE @column_name NVARCHAR(MAX) = '';SELECT @column_name = @column_name + IIF(c.column_id = 1, '', ',') + c.nameFROM sys.columns cINNER JOIN sys.tables t ON c.object_id = t.object_idWHERE t.name = @tbl_name;DECLARE @sql NVARCHAR(MAX) = N'select sum(row_count) as total_row_countfrom ( select {column_names}, count(1) as row_count from {tbl_name} group by {column_names} having count(1) > 1) t';SET @sql = REPLACE(@sql, '{column_names}', @column_name);SET @sql = REPLACE(@sql, '{tbl_name}', @tbl_name);EXEC (@sql);
>>1584200MySQLЕсли тебе нужно только КОЛИЧЕСТВО подсчитать, а не вывести их, то может быть так?MariaDB []> SELECT * FROM t1 ORDER BY lol, kek;+------+------+| lol | kek |+------+------+| 1 | 2 || 1 | 2 || 1 | 2 || 1 | 3 || 1 | 3 || 1 | 4 |+------+------+6 rows in set (0.000 sec)MariaDB []> SELECT `total`, `unique`, `total` - `unique` FROM (SELECT COUNT(★) as `total` from t1) q1 JOIN (SELECT COUNT(★) as `unique` FROM (SELECT DISTINCT ★ FROM t1) q2) q3;+-------+--------+--------------------+| total | unique | `total` - `unique` |+-------+--------+--------------------+| 6 | 3 | 3 |+-------+--------+--------------------+1 row in set (0.001 sec)
Суп sql'ач. Подскажи, существует ли в базах данных такая оптимизированная штука как "калькулируемое поле"? Допустим, у меня есть объект "касса" в БД. У кассы должен быть баланс, но я не хочу его записывать как поле, т.к. его придётся поддерживать консистентным. Баланс у кассы изменяется посредством "финансовых операций" у которых есть "сумма". Собственно, баланс кассы это общая сумма всех операций (например операция зачисления положительная, операция списания отрицательная). Вот и хочу узнать, может есть в БД (postgres) такая функция как какое-нибудь кэшируемое поле, или оптимизированное, автоматически рассчитываемое, т.к. каждый раз пробегаться и суммировать все операции чтобы узнать баланс мне кажется это плохой идеей. Вдруг операций будет сотни и тысячи
>>1584543Можно написать триггер, который видит, что обновляется колонка, и обновляет сумму. В постгресе трингеры есть. Даже в sqlite есть.
>>1584554> ВьюхуПока не знаю, что это. Буду гуглить. > Или функцию пиши, которая будет это вычислятьА это не будет эквивалентно обычной аннотации?>>1584555А триггер это good practice?
>>1584575Вьюха - это по сути алиас для select-запроса, но некоторые вьюхи можно и апдейтить. Не знаю, как она поможет в твоём случае, всё равно её столбцы вычисляются в каждом запросе.Триггеры/процедуры/функции - спорная практика, на самом деле, хоть так делают. В БД должны быть данные, а не логика. Но ради перформанса и консистентности приходится идти на некоторые жертвы.
>>1584575Нет, триггер - это не гуд прэктис.Начнем с того, как ты хочешь получать данные, какую систему ты используешь?У тебя база служит основой для OLTP-системы или ты строишь аналитику?баланс нужно возвращать для одного аккаунта или для пачки?Если OLTP-система, то тебе нужно показывать данные в режиме реального времени, что можно сделать при помощи вьюхи (ПРедставление(View)) или функции. Если ты правильно проиндексируешь табличку, то все будет быстро работать.Если аналитика, то тебе нужно создать механизм для расчета этого баланса и укладки его в отдельную витрину-табличку раз вкакое-то время, например, раз в 1 час.user_id, event_date, balance Соответственно, не нужено перерассчитывать каждый раз табличку полностью, достаточно посмотреть, по каким челам у тебя появились новые данные и рассчитать новый баланс на новые даты по ним.В общем, как обычно, ни хуя не написал, что как где вообще, а ждёшь помощи. Ни хуя так не будет. Есть, вообще, такой ресурс stack over flow, на котором можно что угодно спрашивать, проблема только в том, что там есть репутация, и половина вопросов, которые аноны тут задают, была бы там заминусована в виду недостатка начальной инфы.Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.
>>1584593Еще добавлю, почему тригер - не гуд практис, потому что он будет давать базе неявную нагрузку, и однажды ты увидишь у себя блокировки и не сможешь ни хуя заинсертить, пока тригер не отработает.Еще один варик - это просто иметь расчитанное значение баланса в кажой строчке проводки, например1. 2020-01-01 Вася пупки новый сумма = 0, баланс = 02. 2020-01-02 Вася пупки пополнение счета сумма = 200, баланс = 0 + 200 = 200 (просто прибавляем к текущему начению баланса эти 200)3. 2020-01-03 Вася пупки снятие со счета сумма = -100, баланс = 200 - 100 = 100И т.п.
>>1584543>Допустим, у меня есть объект "касса" в БД. У кассы должен быть баланс, но я не хочу его записывать как поле, т.к. его придётся поддерживать консистентным. Обычно в таких случаях UPDATE в принципе запрещен, а все изменения делаются с INSERT babos, reckord_id, familya_nakosyachvshego_pidorasa_slash_pyzdi.
>>1584606Прям представляю: дали студенту в шараге лабу по базам данных, а он на следующей паре приносит супер-энтерпрайз-хайлоад-систему на полляма строк, учитывающую вообще всё, включая кассовые символа.
>>1584589> Вьюха - это по сути алиас для select-запроса, но некоторые вьюхи можно и апдейтить. Не знаю, как она поможет в твоём случае, всё равно её столбцы вычисляются в каждом запросе.В общем это сильно похоже на аннотацию, только удобнее работать как с реальной колонкой в БД.>>1584593Вообще это внутренняя CRM система в небольшой компании, и на данный момент можно не париться о производительности, и что "баланс" каждый раз будет высчитываться как сумма всех операций на этом "балансе". Просто я хочу знать, как делать правильно, и сделать правильно.Количество таких "балансов" будет небольшим. Думаю в пределах десятков, даже не сотен.> Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.> Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.Ну, чтобы хорошо гуглить, мне нужно хотя бы направление в котором гуглить. Узнать, есть ли что-то подобное, а дальше уже разберусь. Собственно, вот узнал про View, и это выглядит интересным, сейчас пойду луркать что это и как.Спасибо, энивей.>>1584595Двачую>>1584596А это не дублирование данных? На первый взгляд не могу прикинуть какие профиты от такого подхода, ведь вместо этого можно записывать напрямую "баланс" в "кассе", а не в "операцию".>>1584606> Обычно в таких случаях UPDATE в принципе запрещенЯ бы хотел вообще избежать ситуаций, где используются "соглашения" между программистами, т.к. доверять людям это очень ненадежно. Забыл/забил/етц. Достаточно лишь одной ошибки и концов уже не найдешь.
>>1584618Баланс это всегда select sum(babos) group by account_idОперации это всегда insert babos, account_id, прочая_мета_хуета into provodki, где babos может принимать как положительные, так и отрицательные значения.> Я бы хотел вообще избежать ситуаций, где используются "соглашения" между программистами, т.к. доверять людям это очень ненадежноДелаешь триггер на апдейт в котором всегда возникает ошибка.
>>1584624>Баланс это всегда select sum(babos) group by account_idЧем это отличается от того, что я сказал про расчет баланса при инсерте каждой новой строчки с операцией?
>>1584624Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует.
>>1584720>>1584596Я вот тут предложил тебе решение считать баланс на лету на основе последней операции, просто забирая его последнее значение с предыдущей строки этого аккаунта.
>>1584720>Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует. Если поля, по которым ты группируешь индексированы , то нет.
>>1584733Спасибо, анончик, я видел. Просто наличие дополнительных полей обуславливает необходимость поддержания консистентности. А в случае если надо будет изменить одну операцию в прошлом (исправление ошибок, опечаток, что угодно) то в этом случае нужно будет пересчитывать все последующие записи. Я рассматривал такой подход, но только если колонка "баланс" была бы в самой таблице "касса". Тогда бы при создании новой "операции" нужно было бы только прибавить или отнять от текущего баланса. Вот я бы хотел этого избежать. Вообще я бы хотел избежать добавление доп. полей чтобы избежать добавления триггеров и обработку кейсов в коде.>>1584734Ну что же, это я и хотел услышать. Можно даже view не создавать а обойтись аннотацией
Есть нормальные книги/видео/статьи по проектированию БД? Планирую пилить биллинговую систему, в которой будет очень много данных, но знания пока на уровне запросов в БД. А вот как сделоть нормальную релятивную базу, я пока не понимаю.
Сап БДач, у меня знакомый просит в отчёт по практике запилить БД:5-8 несложных таблиц, заполнение, ключи/ограничения, по паре хранимых процедур/функций и триггеров, минорная работа с доступом пользователей и резервными копиями. Программа максимум: набросать простенькую форму для работы БДСуть в том что:1. Это не мой профиль, но в теории умею2. Сделано должно быть через 17 часов.3. Я не сильно горю желанием.Сколько денег запросить?
>>15849135 тыщ проси, если только структуруА простенькую форму для работы с бд - это где, в аксесе, что ли? В пизду его шли с этим. Если не в аксесе, а в вебе - то это долго делать. В общем, не делай форму.
Анон, посоветуй.Сейчас прохожу курс для начинающих по sql, там пока все просто селекты и прочее, запилился на курс ради строчки в резюме для аналитика но вроде мне это понравилось. Как дальше развиваться? Что с этим sql делать можно? Базы данных проектировать или просто запросы писать? Этот момент я упустил
>>1585128Если ты по базам данных угорать хочешь то это DBA - database administrator. Достаточно востребованная профессия. Правда у нас наверное не очень - их на галеры (наверное) мало набирают, если вообще набирают. А местных продуктовых контор не так много, ну и платят они (наверное) не очень, так с галерами конкуренции нет.
>>15850861. Вангую, что процесс 2 будет ждать коммита, и только потом сможет прочитать, вообще это значение.Задачка с подвохом типа, думаю что на собеседовании в условиях стресса решил бы, как ты2 ты сам можешь провенрить это в скл сервере на примере
>>1585320да, сейчас сижу ковыряю сервер. оказалось, что рид коммитед подвисает до момента коммита транзакции и в итоге и там, и там будет 1.
>>1585324вернее, в момент Т3 там будет неопределенное состояние, так как транзакция не выдаст результат, но в некий Т5 в процессе 2 появится единица.
>>1585324ЧавоСерьезно?Это же полный пиздец, ждать завершения транзакции для чтения, что этот sql server себе позволяет?
>>1585330Ага, так правильно.Транзакции - излюбленная тема для собеседовальщиков, очень они на нее дрочат.Еще, бля, чем отличается табличная переменная от временной таблицыВ общем ни хуя нового, дроч вопросы, как на егэ. Вообще, думаю, что устроится на рараба/аналитика баз данных проще, чем сдать егэ по любому предмету.
Третий год я разработчик БД. Начинал с разраба-аналитика отчётов в MS-SQL, далее прыгнул в мелкобанк. Работал в DWH Oracle, сейчас работаю в околопроцессинге, сопровождаю/разрабатываю функционал АБС. Работаю число с ораклом 11, 12, 18, 19 версий очень много разных баз. Пишу пакеты всякие, функции, колупаю индексы, партицирую таблы, делаю api для ява-разрабов и всякое такое. Стандартные задачи DBD в банке.Куда дальше расти? 1) Задорочить яву/котлин со спрингом и ковырять дальше Ынтерпрайз уже пиля микросервисы.+ работа всегда есть+ джавистов всегда мало+ штабильность- могз ебет бизнес (хотя щас также)2) Дальше пойти в Оракле Развиваться в сеньеры/лиды дальше задрачивая DBD.+ работа есть почти всегда+ идти просто по накатанной- порой пиздец скучна- оракле начинают вытеснять другие базы3) Идти в сторону универсального DBA+DBD.Задрачивать Постгресы, Вертики, Терадаты и прочие МС-СиКуЭль. Можно быть дбд + дба.+ знать много субд - дба ещё более унылое чем в чистое дбд4) Идти за мечтой и стать ДатаСиенце.Задатки есть, знаю матан с универа, могу перемножить матрицы в питоне и знаю как строится перцептрон.+ ЗП на порядок больше разрабов или дба+ оч интересно- большой риск остаться голодатьЧто посоветуете? Есть 4 стула.
>>1585865Дам банальный, но единственно верный, как мне кажется, совет - идти за мечтой. Советую только сразу отбросить мысли о большой зп. В дата сайнсе даже после топового образования в шаде многие идут за 60к стажироваться в яндекс. Много получают звезды, стать которой можешь и ты вполне, если правда этим горишь, а не потому что навыдумывал себе хорошую зп.
>>1585865Знаешь ли ты математики, нужные для дс? Они вообще конечно не очень сложные, но поднимать с нуля тервер, матан, статистику и методы оптимизации может быть не так просто. Без них можно быть успешным конечно, но это не сильно отличается от проги обычной, даже в худшую сторону на мой взгляд. По перезапускаешь модельки с разными коэффициентами в поисках оптимальных. Нейронки чуть сложнее, но тоже не сильно отличаются по-моему. Ну и результаты твоей работы не видны сразу и оценить их непросто.В любом случае, если текущая работа совсем не в каеф, меняй конечно. Дба точно минус, уныло же. Дальше в оркл кажется аналогично. Бекенд в принципе норм. Ещё можешь посмотреть в сторону дата инженера (по сути собираешь пайплайны для тех же мл-ей, не сильно отличается от работы с базами, но чуть веселее) или аналитиков, которые рисуют картинки в табло или чем-то аналогичном (опять же опыт работы с бд почти релевантный, + не надо учиться кодить)
Суть в чем, есть устройства, в поле записываются их номераесть поломки на этих устройствах, в поле записываются их причинынужно найти повторяющиеся причины поломки на устройствекаким образом можно это найти, может есть какие то функции которые помогут сосчитать? я уже не знаю куда копать(так же реквестирую годную литературу что можно почитать по postgresqlwith city_filial as ( select c1.city_name as city , c1.city_id id , case when c1.parent_city_id is null then c1.branch_name else c2.branch_name end as filial from cep_city c1 left join cep_city c2 on c1.parent_city_id = c2.city_id where c1.city_id not in (-1,0)select filial, count() as "Аварий", count(distinct net_address) as "Уникальных устройств", count() - count(distinct net_address) as "Повторных аварий", 100(count() - count(distinct net_address))::float/count(*) as valuefrom cep_accident_guts left join city_filial using (city)where start_time BETWEEN '2020-01-24T00:47:54.153Z' AND '2020-01-24T06:47:54.154Z' and event_type in ('Причина поломки 1','Причина поломки 2','Причина поломки 3')group by 1 order by 5 desc
>>1585932Обоснуй>>1585936>В дата сайнсе даже после топового образования в шаде многие идут за 60к стажироваться в яндекс. Яндекс - клоака зловонная. ЗП там деймеингуют очереди из вайтишников. Плюс ебучая академия Яндекса которая набирает себе мясцо по ценам 2014 года. Джуны/мидлы получают там хуйню, особенно первые. Посоны ДС даже в нашем мелкобанке получали 100 как джуны, от 160 как мидлы.>>1585944> Знаешь ли ты математики, нужные для дс? Они вообще конечно не очень сложные, но поднимать с нуля тервер, матан, статистику и методы оптимизации может быть не так просто. Учился на математка. В универе 4 года назад это проходил. Думаю осилю. По задачам для выкатывания посмотрел там не очень сложно: СЛАУ, ДУ, производные, операции над матрицами, комбинаторика. Все знакомо. > В любом случае, если текущая работа совсем не в каеф, меняй конечно. Не прям чтобы до тошноты, но понимаю что этим заниматься смогу ещё максимум пару лет, дальше начнется выгорание. Поэтому ищу способы разнообразить рабочий процесс. >Ещё можешь посмотреть в сторону дата инженера (по сути собираешь пайплайны для тех же мл-ей, не сильно отличается от работы с базами, но чуть веселее) или аналитиков, которые рисуют картинки в табло или чем-то аналогичном (опять же опыт работы с бд почти релевантный, + не надо учиться кодить)Вот это гляну. Оттуда легче перекатится в DS.
Приветик всем в этом чатике. Я совсем зеленый, но интересно стало.Такой вопрос: Можно ли задавать условия вывода? К примеру: SELECT id, name FROM table1 WHERE id>=2Именно интересует этот момент: WHERE id>=2Будет ли это работать и работать корректно? Выведутся ли мне результаты из таблицы с id от 2 и выше?
>>1585986>Яндекс - клоака зловонная. ЗП там деймеингуют очереди из вайтишников. Плюс ебучая академия Яндекса которая набирает себе мясцо по ценам 2014 года. Джуны/мидлы получают там хуйню, особенно первые. Посоны ДС даже в нашем мелкобанке получали 100 как джуны, от 160 как мидлы.Типично для славянских хуесосов, которые конкурируют исключительно демпингом.
Сап, ананасы. Хочу вкатится в базы данных, не посоветуете годный учебник по sql с практикумом? И если можно то и на Android, дабы обучаться на рабочем месте без особого палева
>>1586266На началах (если время позволяет) можешь в SoloLearn начать. Получишь немного теории, познакомишься с синтаксисом. Знатоком и экспертом после курса в сололирн ты не станешь, это лишь самое начало.
>>1586360Уже в процессе. Но что дальше ботать? Плюс опять же нужна практика, пусть хоть и из примитивный заданий.
>>1586391братик, сейм щит, задрачиваю сейчас один курс, думаю дальше попробовать в развертывание/DBD но хз где материал брать
Не подскажете, как можно пройтись по селекту вперед и назад?Как в программировании: двигаться с концов массива в его центрРешаю задачку с скл-ех 125, чет ваще никак
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
помоги пожалуйста, анончик Есть таблица table1(id, name)где id является ключом. Поле name может повторяться.Задача: написать один запрос, который удалит все дубликаты. Т.е. значения в колонке name станут уникальными, но множество, составленное из значений колонки name не должно изменится.Если есть два кортежа (1, 'abc') и (77, 'abc') остаться может любой из них.
Великомудрые повелители БД, решил угореть по хардкору и написать складскую БД на Access_und_VBA, для учета стройматериалов на участке. Никак не вдуплю в алгоритм. Планирую мутить БД "Справочники" с таблицами по типам материалов и при поступлении на склад вносить в таблицу "Приход" с такими полями: id_материала (=id_материала_в_справочнике), дата поступления, кол-во, контрагент, номер накладной. И также заносить этот приход в таблицу "Склад", предварительно отыскав материал с подобным id и добавляя только количество. При выводе со склада ебашить в таблицу "Проеб" с датой, id, кол-вом, контрагентом и т.д. Я правильно мыслю или можно подобное замутить в одной таблице и я множу сущности?
>>1593871select t.name,min(t.id) as min_idinto temp_tablefrom "table1" tgroup by nametruncate table "table1"insert into table1 (id, name)select id, name from temp_table
>>1593993>складскую БД на Access_und_VBAНафига, если рано или поздно придётся интегрироваться с какой-нибудь 1С-парашей. Бери сразу Odin-Ass.
>>1594288>интегрироваться с какой-нибудь 1С-парашейНикто нам в прорабку, в чисто поле, не поставит 1С. Буквально пару прорабов и кладовщик будет кнопки жмакать. ну может еще сводные отчеты будет в ворд генерить и по почте отсылать.
SELCET ALL FROM HUI WHERE PIZDFAS A LASDKLGNFDLSK GHLDFGSKH MFGD,MGDFHH BJ;LDFSMGKL;DFG,H;LGFJHGL;SDF,GHGDСУККАААА ЗАЕБАЛО ЗАЕБАЛААА ЗЩАЕБАЛАААА
>>1594390И я двачую. Мне он видится таким логичным, в отличии от хаотичного css - жабаскрипта.Удивляюсь, как многие фронтовики смогли выдрочить все эти ангуляры с реактами, на которых голову сломать можно, а простой понятный скл асилить не могут.
Суп БДач. Подскажи плез.Использую postgres. Я хочу создать виртуальную таблицу (view) что того чтобы хранить в ней "готовые рассчитываемые поля", чтобы каждый раз не прописывать их в запросах. На пике изображено что я хочу. Есть чек, к чеку привязываются позиции. Сумма всего чека формируется из "суммы сумм" его позиций. Собственно я хочу, чтобы колонка "Чек.сумма" было виртуальным, а не физическим. В postgres есть функция виртуальных колонок, но она не позволяет обращаться к related объектам. Триггеры использовать пока не хочу.Собственно вопрос:Можно ли как-то связать таблицу и её отображение хотя бы какой-нибудь связью? Чтобы поле суммы было как можно ближе к записи "Чек"?
>>1596095А какие предложения лучше?Я в принципе сделал, что хотел, и скажу что моя ошибка это размышление о БД терминами ORM. В итоге сам загнал себя в угол и искал несуществующие вещи.Но если есть какое-нибудь решение лучше, буду рад выслушать.
Классический вопрос про букингИмеется аналог airbnb, люди ставят время, когда хата доступна для сдачи. Хата может быть недоступна не только потому, что её заняли, но и потому, что хозяин не хочет её выставлять сам живёт в данный момент в нейЯ замутил таблицу exposed_days, где хранятся дни, когда хата доступна (единственный минус (имхо) такой реализации - диск засирается)Коллега говорит, что дни тупо хранить, надо хранить ренджи. Я решил сделать бенчмарк, но по-видимому ренджи сильно сосут у хранения отдельных дней или я просто не могу в запросЗадача такова: выбрать свободные даты на ближайший месяц.Реализация с ренджами:Дни, когда хата доступна в принципе:exposed_datesdaterange: daterangehome_id: intДни, когда хата занята:reserved_datesdaterange: daterangehome_id: intinvite_id: intЗапрос, который ищет свободные даты:SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) AS available_dates FROM exposed_datesJOIN homes h ON exposed_dates.home_id = h.idEXCEPT SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) FROM reserved_datesJOIN homes h ON reserved_dates.home_id = h.idУже для 100к записей он работает полсекунды. При этом я не могу пользоваться вычитанием ренджей, т.к. там DISJOINT ошибка - result of range difference would not be contiguousМожно как-то улучшить этот запрос?при реализации с отдельными днями сет из 100к свободных дней при таких же условиях отрабатывает за 70мс
>>1596535Как минимум можно один раз join делать с homes. Потом в инете есть норм решения по "result of range difference would not be contiguous".
>>1596535Бред какой-то. Хранить нужно даты, и не exposed, а все вместе. У даты должен быть статус и опциональная связь с арендатором. Тогда можно для хозяина сразу рисовать календарь с именами в занятых клетках.
MySql боги помогите решить задачу.- определить количество уникальных наименований .- определить кол-во артикулов входящее в каждое из уникальных наименований.- разделить прайс на группы с 01 по 99 по номеру артикула, где номер группы это 5 и 6й символы.- определить кол-во артикулов в каждой из групп.- определить кол-во уникальных наименований в каждой из групп.- последние 2 пункта вывести в виде отчета: Группа, Кол-во артикулов, Кол-во уникальных наименований.таблица вида:Номер | Имя | Время |z56 |Item1 | 11-12 | x33 | item2| 12-20 |z26 |item1 | 01-25 |h33 |item2 |21-30 |
>>15981311. SELECT DISTINCT count(item )FROM t1 GROUP BY item2. SELECT DISTINCT count(nomer) FROM t1 WHERE nomer = (SELECT DISTINCT count(item )FROM t1 GROUP BY item) GROUP BY nomer возможно ошибся в подзапросе3 плохо формализована задача или я туп ХЫ
>>1598150>>>1598131таблица уехала. должно быть так:__Номер __|______ Имя __| Время |z1234561234 |Item1 | 11-12 |x1234331234 | item2| 12-20 |z12342612 |item1 | 01-25 |h123433123 |item2 |21-30 |
>>1550921 (OP)Сап господаЕсть warehouse (sql server) в виде star schema и два релейдет вопроса.1. Есть проблема с производительностью, так как у определенных компаний данных много (пару миллионов), следовательно запросы с тонной джоинов и предикатов длятся долго, индексы, где они имеют место, само собой присутствуют.Денормализация не везде возможна и не сильно спасаетЧто обычно в таких случаях делают?Вопрос скорее с точки зрения любопытства, на практике я никаких инициатив пропихнуть не смогу 2.Используется ORM, так что запросы в итоге делаются через sp_executesql Что выливается в parameter sniffing и в просадки по производительности:Почистили кэш, сделали запрос для мелкой компании, план запроса попал в кэш, делаем запрос для крупной компании - ловим timeout из-за того что используется неоптимальный план.Какие выходы из этой ситуации?На данный момент на каждый запрос в подобных местах стоит option recompile, но это определенно не выход.
Попросили перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бд. Решил собрать инфу по комплектующим компьютеров и застрял на структуре бд: я втупую могу каждой комплектующей выделить свою таблицу с ценой, названием и характеристиками, но тогда в ней не будет никаких связей а от меня ждут явно реляционную бд и это, как мне кажется, не самая лучшая практика.
>>1551177>>1550940Если это оракл, то тебе надо делать 2 типа данных уровня схемы. Один просто is object, а другой is table of. Процедуры не умеют возвращать значения в привычном виде, но могут через out параметр.Параметры in - даты, группы товаров. На out - коллекция через bulk collect. Как правило так не делается, тем более это можно сделать через функцию. А если нельзя прокинуть предикат то юзается pipeline-функция.
>>1597525Если я правильно понял, то ты поддерживаешь реализацию, где хранятся отдельные дни.Выставил с 10 по 20 - создается 10 записей с датами. Так?
>>1599084>перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бдты им хочешь таск закрыть?
Можно ли в postgres сделать кастомный тип со встроенной валидацией контрольной цифры, например, для ИНН?
Сап.Открыл для себя редгейт, понравилось, появилась зависимость. А потом у него кончилась двухнедельная триалка:( Реквестирую советы как обойти его защиту, так как тулы топовейшие, а 1500 баксов в год платить не могу
>>1601858Мне тянка на новый год подарила RedGate AutoComplete Для SSMS.Долго страдал, но бабок зажимал, в итоге она мне предложила в подарок, кек. ПОДАРИЛИ ПРОГРАММУ.На рутрекере есь старые версии, но они все убищные. Кстати, раньше в redgate работал еще ключi need more timeКоторый еще на какое-то время давал с ним поработать.
>>1602222Да про ключ знаю, пробовал, уже не работает.С ресетом триала не получается. Пробовал удалять, чистить руками реестр и все записи о редшейте и это не помогает. Он при установке разварачивает свой сервис на 22223 порту, а тот шлет на их серв полный конфиг системы и получает ответ что триалка на этой машине уже запускалась. В общем, судя по всему, оно сейчас не ломается
А если нужна дата на десять дней раньше последней, как писать запрос надо? max(date) - последняя - работает. SELECT DATE_SUB(max(dt),Interval 10 DAY) - уже нет
Ребят, помогите с MySQL (в какую сторону копать). Есть один проект, который работает на этой бд, и у меня некоторые траблы с ней. Сам сайт работает довольно быстро, т.е запросы, где происходит выборка или запись в бд происходит довольно быстро, но иногда эти же самые запросы отрабатывают нереально долго, что приходится перезагружать страницу. И суть в том, что если я перезагружу страницу, и выполню такой же запрос еще раз - он отработает быстро, так, как должно. В чем может быть проблема?
>>1603951Начал копать сюда. Но никак не могу понять почему же все-таки он зависает, и почему он делает это не всегда.
>>1603946Профайлер запускай и выпаливай, что долго работает. Что тут посоветовать еще. Мб запрос и быстро отрабатывает, но его тчо-то лочит (незакрытая траза какая-нибудь)А мб и долго, потому что оптимизатор mysql не может построить план, например.Да до хуя причин есть, нет смысла их все перечислять без первичной диагностики, выпаливай запрос через профайлер, потом уже смотреть можно будет.
Что следует читать после Learning SQL? Сборник рецептов или же нет? Есть ли общие рекомендации по литературе для вкатывания в sql вообще и в oracle? Какие книги следует прочитать для понимания er-моделей?
Анон, есть основная таблица DOCUMENT, в которой хранятся разные типы документов. И есть связывающая таблица LINKEDDOC, которая хранит связи между документами.Мне нужно найти документы типа t1, которые имеют связанный документ типа t2 и у которых не совпадает поле BRANCHID. Например на скрине это документ с ID=3, который связан с документом ID=6Я написал говно#1:select from DOCUMENT djoin LINKEDDOC ld on ld.DOCID = d.DOCIDwhere d.DOCTYPEID = t1 and d.BRANCHID not in (select d1.BRANCHID from DOCUMENT d1 join LINKEDDOC ld1 on ld1.DOCID = d1.DOCID where d1.DOCTYPEID = t2)И говно#2:select from BASE_ORACLE.DOCUMENT d1join LINKEDDOC ld1 on ld1.DOCID = d1.DOCIDjoin (select * from DOCUMENT d2 join LINKEDDOC ld2 on ld2.DOCID = d2.DOCID where d2.DOCTYPEID = t2) d3 on d1.BRANCHID != d3.BRANCHIDwhere d1.DOCTYPEID = t1Оба говна не работают. Халп!
>>1606658Мимо нюфаг написал говно:select doc_h.Docid_h Docid_h, doc_h.Docid Docid, doc_h.globaldocid globdocfrom (select d.docid Docid_h, ld.docid Docid, d.branchid branchid, d.doctypeid doctypeidfrom documet d join linceddoc ldon d.globaldocid=ld.globaldocidwhere d.doctypeid = 't1') doc_h join document don doc_h.Docid=d.docidwhere doc_h.branchid!=d.branchid Это вообще и не сработает наверное.
>>1606806Первый docid в котором id главного документа.Там подзапрос возвращает таблицу в которой два столбца docid. Первый из document (Docid_h), второй из linkeddoc (Docid).
>>1606845Пока только эту книжку осилил, может поможет. А это задание с собеса или ресурса какого? На деле мне кажется запрос хуевый >>1605561
Подскажите нюфагу. Есть таблица с полями user_id, event_date и event_type. Нужно для каждого месяца вернуть число новых пользователей и число пользователей, вернувшихся в следующий месяц.По отдельности я два корявых запроса написал, а как объединить их теперь, не знаю.
>>1606999А если делать через join все? Будет ли это максимально плохо? select * from(select resuit.monts_reg monts_reg, count(reg.user_id) registrfrom(select reg.user_id, reg.monts_reg, log_first.monts_logfrom(select user_id, DATE_FORMAT(event_date, "%m") monts_regfrom eventswhere event_type= 'register'group by user_idorder by user_id) regjoin (select user_id, min(DATE_FORMAT(event_date, "%m")) monts_logfrom eventswhere event_type= 'login'group by user_idorder by user_id) log_firston reg.user_id=log_first.log_id ) resuitgroup by resuit.monts_reg) register_count join (select resuit.monts_log monts_log, count(reg.user_id) loginfrom(select reg.user_id, reg.monts_reg, log_first.monts_logfrom(select user_id, DATE_FORMAT(event_date, "%m") monts_regfrom eventswhere event_type= 'register'group by user_idorder by user_id) regjoin (select user_id, min(DATE_FORMAT(event_date, "%m")) monts_logfrom eventswhere event_type= 'login'group by user_idorder by user_id) log_firston reg.user_id=log_first.log_id ) resuitwhere resuit.monts_reg+1=resuit.monts_loggroup by resuit.monts_log) login_counton register_count.monts_reg=login_count.monts_log
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
>>1607228Не знаю про "где посмотреть", но типичный кейс с ETL с использованием хадупа -- это реплицировать редко используемые, не апдейтящиеся данные с какой-нибудь активной дорогой бд на дешевый хадуп.Но это довольно тяжело представить в виде пет проекта
>>1610508>make every programm a filterчтоб фильтровать прыщеблядей пердолящих сосноль от нормлаьных людей
>>1610597cat db.json | jq -r '.items | sort_by(.col2)[] | select(.col1 == 123) | [.col1, .col2] | @tsv'cat db.json | jq -r '.items | map(select(.col1 == 123)) | sort_by(.col2)[] | [.col1, .col2] | @tsv'
>>1610742Сразу видно нормального человека, не сидящего в /s/.> чтобы отсеивать линуксоидов, проводящих всё свободное время в эмуляторе терминала
>>1610803>А есть ли вообще хоть одна причина юзать монгу?С монгой тебе не нужно искать оправданий тому, что ты не можешь написать оптимизированный запрос на SQL.
>>1610874Пердящие деды из 70-х писали настолько эффективный код, что бизнес-задачи целой корпорации требовали меньше железа, чем одна страница с реактом в 20-х.
>>1610896Причем у тут деды? Они бы охренели, от rps и бигдат, которыми мы не напрягаясь рулим.А реакты хотят пользователи.Мы бы обошлись command line tools.
>>1601858upd. порывшись в самых глубоких клоаках китайских интернетов, нашел рабочие кейгены для большинства продуктов редгейта.https://drive.google.com/openid=1cdIodi9zIfReP0M3sHl6GxfNeazkwyUHтам кейгены и инструкции к ним. виндовский антивирус ругается, поэтому, если боитесь, запускайте на виртуалке
>>1610905>>А реакты хотят пользователи.Но я не хочу реакт, мне вообще этот современный дизайн для планшетов на ПК не нравится (огромные буквы и неинформативные картинки с кучей эффектов и тормозов). Мне уровня фейсбука вполне достаточно. Реакт хочет заказчик, а пользователь жрет что дают.мимо дед-пользователь
>>1611489Но ведь реакт вообще не про дизайн, он только про иерархию компонентов, внешний вид которых может быть любым.
Есть одна таблица(пикрелетед),всё хорошо пока событие, идёт в рамках одной смены, но если ВремяНачала попадет на первую смену, а ВремяКонец на вторую, нужно это событие порезать на два.Т.е. у нас событие govno длящееся 40 минут, 20 из них попало на 1 смену, 20 на вторую, нужно сделать два события govno, в обе смены, с нужной длительностью.Временные смены фиксированы( положим с 9 до 9), есть даже вторая таблица, где хранятся все смены(но к ней нет прямой привязки, но можно заджоинится по ДатаВремя).
Какая субд?Как выглядит табличка-справочник со сменами?Что ты хочеш написать? Select, который будет генерировать новые строки на основе твоего условия, или Insert, который прямо во время события будет укалдывать в твою табличку 1 (или 2) строчки?
Тут обсуждают монгу? Кто-нибудь знает, почему может выдаваться ошибка"MongoError: Topology is closed, please connect"?
>>1614072Наивно. Сюда в основном заходят, чтобы спросить, как прямо сейчас решить какую-то конкретную задачу и, получив ответ, уходят. Никаких обсуждений, ничего интересного :(
>>1614091Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулю
Есть кто шарит за serverless db? Мне нужно вкатится, но не хочу тратить время на неправильный курс, может анончик подскажет. FaunaDB вам как?
>>1614100>Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулюТеррадата/hive
Такой вопрос.Есть, например, таблица материалов. Для получения каждой единицы материала надо сколько-то компонентов. Причём основываясь на количестве компонентов, затраты должны считаться автоматически.Как это лучше организовать с точки зрения БД?Вынести количество и затраты в отдельную таблицу?
>>1613592Держи.t_event - табличка с событиями, в ней start_date - датавремя начала, end_date - датавремя окончанияd_work_shift - табличка со сменами, в ней start_date - датавремя начала, end_date - датавремя окончанияSelect e.event_id,s.work_shift_id,iif(e.start_date >= s.start_date, e.start_date, s.start_date) as start_date,iif(e.end_date >= s.end_date, e.end_date, s.end_date) as end_datefrom t_event einner join d_work_shift s on (e.start_date >= s.start_date and e.start_date < s.end_date) or (e.end_date >= s.start_date and e.end_date < s.end_date)
>>1614937Толсто>>1614100Какой проект-то? Интернет-магазин?Я в любом случае за постгрес между ним и майскл, в 1000 раз больше опций. Кажется, mySql по-прежнему не умеет в CTE даже, что уж говорить про оконные функции и прочие ништяки.
>>1615124Я тоже пробовал что-то вроде этого.Конкретно в этом варианте:1) Не добавляют строку, а просто меняет время начала-конца2) Вместо того чтобы резать просто подставляет Время смены на которою заходит верхняя граница( При том не высчитаное, а просто начало-конец)Например:Мы полагали что смена идёт с 9 до 21, и выходит:Старая запись 8.15-9.15Новая Запись(которую вернул запрос)9,00-21,00
>>1615177Ну с датами в iif наверное что-то нахуеверчено, щас почекаю, а вот что он не режет, это уже проблема.
>>1615124а нет погоди, таки режет, просто iif втором местами поменяны были e.end_date, s.end_date, и я неправильно счтал datediff. Спасибо аноныч.А что будет если событие скажем длинной в неделю? Отдельную обработку для него делать?
>>1614939Я так понял материал А изготавливается из материала B, который в свою очередь из материалов C и D?Тогда иерархическая таблица типаmatrial | quantity | parent_id | purchasedparent_id - ссылка на запись в той же таблице на материал, который изготавливается из этого материалаpurchased - булевы флажок, показывает, что материал "нижнего уровня", не из чего не изготавливается, а покупаетсяДелаешь рекурсивный запрос, сначала выбираешь "верхние", материалы, у которых нет paent_id, к ним юнионишь те, у которых parent_id - это айди первой итерации, из всего, что получилось делаешь select sum(quantity) ... grop by material where purchase=true
>>1614939То есть если хуёвина А изготавливается из шести хуёвин B, а та - из трёх хуёвин С и двух хуёвин D,
>>1615209>>1615206Как-то так.Но всё-таки уточнение:есть объект А, для его изготовления нужен: объект B в количестве, например, 2 штук, объект C в количестве 3 кг и объект D в количестве 5 литров. Причём стоимость 1 штуки B, 1кг C и 1 л D вынесена в отдельную "справочную" таблицу.Надо: организовать всё это во взаимосвязанные таблицы и подсчитать затраты на А, причём, желательно, сразу, основываясь на данных "справочной" таблицы.Т.е. B, C, D - компоненты A, надо ли эти компоненты все в один столбик забивать? Или каждому - отдельный столбец? Их же очень много может быть. А что насчёт количества компонентов? Их вместе с названием писать типа B - 2 шт. или тоже вынести в отдельную таблицу?
у меня есть пикрил как мне просуммировать все результаты, то-есть что бы было не рядов а 3 такая 3 testRegistration2 15 7661 test 12006 user 300
Последние дни вкатываюсь в реляционные базы данных. Пытаюсь спроектировать хранение формул в таблице. Идея примерно такая, что сложные формулы декомпозированы на мелкие формулы, хранящиеся в таблице в виде ид_формулы, операнд1, операнд2, операция. При этом операнд может быть либо внешним ключом на другую формулу в этой таблице, либо внешним ключом на некое поле в другой таблице. Какие подводные камни? На связи в ER сильно не обращайте внимание, я пока не до конца понимаю, что я делаю.
>>1594952Двачую, сикуэль это как на ангельском просто писать в правильном порядке ВЫБРАТЬ хуйню ИЗ таблиц ПРИСОЕДИНЕННЫХ к другим таблицам ГДЕ ... ГРУППИРОВАТЬ ПО. Все максимально логично.
Помогите заплутавшему студенту, пожалуйста. Делаю АИС, застрял на проектировании сущностей.Для формирования договоров на платные услуги, доп. соглашений с пациентами, штатного расписания и графика отпусков нужно хранить реквизиты поликлиники (в договоре и соглашениях используются всякие номера и счета, в расписании и графике - наименование организации). Я не понимаю, куда и к чему таблицу с реквизитами присобачить. Накидал по-быстрому схему. Где и какой внешний ключ создавать? К "ДопСоглашению" привязывать? А то, что атрибут "Наименование организации" потом в штатном расписании и графике отпусков используется, ничего?
>>1615690Одно время тоже об этом думал.В итоге пришел к выводу, что удобнее хранить формулу текстом и парсить уже в приложении ее.
>>1550921 (OP)>Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурсчтобы было, на кого можно подать в суд
Не совсем пойму, в каких ситуациях можно без страха использовать shared кластер в Mongo Atlas - только для разработки, или если совсем небольшая приложуха, то и в проде нормально? "Low-traffic applications" - это насколько "low" подразумевается? Поначалу база будет совсем маленькая, не ожидаю 500 одновременных соединений и т.д. А то 0.08$ это 4к в месяц, дороговато. А поднимать монгодб вручную на том же digital ocean выглядит слишком сложно.
>>1619889вообще их много можно поискать по запросу ER diagram generator/creatorhttps://editor.ponyorm.com/user/pony/pycon2014/designer
Аноны помогите советом. Реальные данные не могу привести, но попытаюсь объяснить проблему на примере. Вообщем есть человек и у него может быть множество различных транспортных средств. Например автомобиль, велосипед, танк, самолет и прочее. Для каждого из транспортных средств своя таблица. Таких таблиц может быть в принципе неограниченное количество. У человека каждого трансп средва может и не быть, каких-то может быть овер9000 и тд.Вопрос. Как правильно организовать получение всех трансп. средств минимальными затратами, дабы каждый раз не делать селекты из каждой таблицы? БД postgresql. Пробовал вариант с наследованием, но когда делаешь селект из базовой таблицы (например трансп. средство) то он возвращает данные из всех таблиц, но уникальные столбцы каждой таблицы соответственно не выводятся и плюс родительская таблица всегда получается пустой. Единственный вариант который вижу - добавить таблицу, в который будут храниться типы трансп. средств которые есть у человека и соответственно делать селект из нее, а потом уже программно обходить только нужные таблицы. Но этот вариант очень ущербный в плане проверки целостности при каждом добвлении / удалении новой записи в любую из таблиц.
>>1611489на фейсбуке ux/ui так себе кста, даже блят не читаемо, если сравнивать с вк, 2 млрд пользователей с вытеканием глаз
поставил postgres 9.6 voidlinux слинковал сервис из /etc/sv/postgres/ в /var/serviceвыполнил sudo -u postgres -i пердолю initdb --pgdata=/var/lib/pgsql/dataи выдает creating directory /var/lib/pgsql/data ... initdb: could not create directory "/var/lib/pgsql": Permission deniedесть дока не помогает как мне заставить все ето заработатьТо есть поставил, врубил сервис, ща создаю кластер баз даных в виде директории где все будет хранится? Но он арет про разрешения
Cап, эскьюэлач, сейчас будет тупой вопрос!У меня в бд есть таблица с записями типа:https://pastebin.com/raw/bYrcijf2И записей в таблице до пизды более 20тыс.строк, так, вот, как вы можете видеть, в столбце dates хранятся даты в виде json массива, в котором бывает до 30 элементов, и чтобы найти записи с определенной датой, я выполняю запрос с dates like "%DD.MM.YYYY%".Мне это видится лютым колхозом, и собсна, реквестирую способы перестроить бд чтобы от данного непотребства избавиться.Единственный вариант, что я вижу, создавать для каждой даты отдельную строку, но мне кажется, что тогда очень сильно возрастет объем, занимаемый бд.
>>1622282продолжение:те кто писал sudo (dosu desu) был прав отчасти я пробовал sudo и su, зашел через sudo -u postgres -iкак я понял мне надо сначала поднять базу данных на локалхосте, создал тестовую db через createdbНужно ли редачить конфиг? pg_hba.conf и postgresql.confкак например тут это описано https://stackoverflow.com/a/38466547/6757388хуле это не описано в докея думал поставил пакеты и все блят, через pgadmin4 заходишь и создаешь нужные бдНу так вот вопрос че делать дальше, пробовал через psql и просто localhost писать
>>1622466> Единственный вариант, что я вижу, создавать для каждой даты отдельную строкуДа.> тогда очень сильно возрастет объем, занимаемый бд200к строчек это ни о чем, так что поэтому поводу можешь не переживать.По сути ты тут выбираешь между скоростью запроса и объемом бд. Если первое тебя не беспокоит, то ничего не делай.
>>1622466>создавать для каждой даты отдельную строкуЗато повысится уровень нормализации и ты сможешь делать нормальные фильтры, джойны и так далее.Второй вариант, хранить и работать с ними не как со строкой, а как с типом jsonb[], для работы с которым есть нормальные функции, а не поиск лайками.
>>1622538>jsonb[]Резонно, но мне показалось, что поиск по одной строке будет быстрее чем по массиву со строками. Проведу пару тестов
>>1622164>>на фейсбуке ux/ui так себе кста, если сравнивать с вкЧет я зря про фейсбук написал, последний раз когда на него заходил - он от вк не отличался.
>>1622514подключился к локальной базе данных в pgadmin4 только через 192.168.0.10, после того как увидел через ss -noa, чому так? Я же настроил в конфиге через локалхости и любой айпи
Сап, реляционные. Такой сетап:Есть база, в базе меня интересуют три таблицы, две идентичные, третья связана с ними, одна запись третей таблицы связана только с одной записью в одной из таблиц. Нужно получить результирующую таблицу со всеми полями из этих таблиц + пару дополнительных полей, заполняемых в зависимости от значений в полях изначальных таблиц.Поначалу понятно, хуярим два иннер джоина, потом юнион результатов. А вот как добавить поля и заполнить их я хз. Сами методы для дерганья данных я знаю, но как написать код добавляющий и заполняющий эти поля я не очень осознаю. Тупо какими-то циклами или можно к джоинам как-то прикрутить, шоб изящно было?Мимонубас
>>1624342Можно прямо в выражении определить "вычисляемую таблицу" и сделать джоин с ней. Это зависит от конкретной СУБД, в оракле будет типа такого:(select 1 as "a", 2 as "b" from dial union select 3, 4 from dual)
>>1624693Например, вот.-- Создаём и заполняем таблицу:create table mytable (id integer not null);insert into mytable (id) values (1);insert into mytable (id) values (2);-- в скобках - table expression, джойним его с mytablewith t as ( select 1 as mytable_id, 'foo' as val from dual union select 2 as mytable_id, 'bar' as val from dual)select * from mytableinner join t on (mytable.id = t.mytable_id);
>>1624693Или тебе не данные нужны, а прям новую таблицу создать? Тогда да, смотреть в словаре данных, какие в тех таблицах колонки, и вручную через циклы их добавлять в новую таблицу.
Хай, аноны, есть следующая задача (всплыла из-за говнокода при решении другой задачи):Есть результат запроса с полями id1, id2, id3Если id1 и id2 в двух строках меняются местами (вроде 1 10 5 и 10 1 5), то это гарантированно дубликаты.Можно ли как-то их выпилить? Думал васянскую хэш-функцию запилить, но она не гарантирует корректной работы, с груп баем тоже ничего придумать не могу.
Добрый день!Застрял на задании по вложенным запросам --Получить спецификацию монитора, имеющегося в наличии на складе, цена которого минимальна*.Не могу понять что не так и как вывести нужный результат.Может кто нибудь подсказать в чем ошибка что не так ?
Помогите нубуЕсть таблица users на 60+ колонок, 50 из которых могут изменяться со временем. Моя задача создать новую запись если старая изменилась в любой колонке НЕ удаляя старую, то есть UPDATE не подойдет. Типы значений разные. Мое текущее решение огромное и с кучей повторения которое невозможно нормально отлаживать.пытался плейсхолдерами пофиксить, лучше не сталоINSERT INTO users(col_1, col_2, col_3,...col_50)SELECT %[1]v, %[2]v, %[3]v, .... %[50]vWHERE NOT EXISTS(SELECT (col_1, col_2, col_3,...col_50) FROM users WHERE col_1=%[1]v, col_2=%[2]v, col_3=%[3]v, ...col_50=%[50]v);Если колонок было до 5 еще ладно, но когда их много это решение совершенно не годится
>>1628588Спасибо большое, это то что нужно и даже лучше, хоть и с реализацей пока не полностью разобрался в силу малого опыта
у меня есть колонка под названием "to" и "from"собственно проблема на пикриле , как фиксить?изменить название колонки не вариант, база не моя
Посоветуйте курс для того, чтобы смочь начать проходить простецкие задания для собеседований (SQL это не главное требование, но всегда присутствующее). Все, что помню из школы/вуза SELECT *Можно сложный, можно на английском. Часов на 5-20.
Бля я тупой или что. Мне нужна in-memory SQLite DB, а у меня есть файлик dbtest.db и я хочу таблицы оттуда выгрузить, но куда я не смотрю везде говорят ПРОСТО поставь вместо имени вот этого dbtest.db :memory:, но блять я не хочу писать в коде таблицы, но сохранять хочу в памяти. А если я просто сделаю "jdbc:sqlite:personinfodb.db::memory:" То будет синтаксическая ошибка в имени бд, т.е оно считает что personinfodb.db::memory: и есть имя бд (неважно сколько там : перед memory, в любых вариациях ошибка.)
>>1629175Все здорово, разобрался с типами scd, хэш функциями для колонок, написал свои триггеры, создал служебные таблицы, теперь все клево и быстро
Есть профит от datagrip? Своим скудным опытом попытался найти отличия от встроенного БД функционала в других продуктах jetbrains не увидел разницы. Мне вообще нужна относительно легковесная штука с автокомплитом под postgres на линукс, pgadmin со своим апачем раз в месяц стабильно отваливается, надоело уже.
>>1630108а разве нужно ставить имя для базы в памяти? пробуй просто :memory: и или ты там хочешь несколько баз
>>1630266Я хочу написать дбшку как файл, после этого когда буду делать коннекшон просто поставить дбшку, а не писать руками опять. Но я вроде бы нашел, что проблема в какой-то мелкой запятой, которую я не могу найти
есть таблица с id,chop,product,saleДелаю такSelect chop,product,(SUM(sale)/(select sum(sale)from t1))*100From t1Order by chop,product
Как настроить секционирование на mysql?Чтоб оно автоматически резало на секции, какой примерный алгоритм?
анон, мне нужно передать параметром таймспан и преобразовать его в дейттаймп в формате гггг-мм-дд как это сделать?
или я могу конвертировать ticks в datetime, datetime же в тиках хранится но я почему то не нашел ни одного способа преобразовать лонг в тики и тики в дейттайм
>>1635681WITH Govno ASSELECT COUNT(Товар)FROM ФруктыGROUP BY ГруппаSELECT ТоварWHERE Товар in (SELECT *FROM GOVNOWHERE GOVNO>1)
>>1635688А бля, Aкелла промахнулся, вот так:WITH Govno ASSELECT COUNT(Товар) AS DubleFROM ФруктыGROUP BY ГруппаSELECT ТоварWHERE Товар in (SELECT DubleFROM GOVNOWHERE Duble>1)
>>1635689ааа бляяять да идите нахуй корочеSELECT Товар, ГруппаFROM ФруктыWHERE Товар in( SELECT Товар FROM Фрукты GROUP BY Группа HAVING COUNT(Товар)>1)
>>1635945.>>1635857а вижу в чём дело...ну врот его ебал в уме это всё придумывать, ты уже должен был понять как делать. вот так решается как я написал, сядь поправь, принцип тот же, сравниваем через ин с групировкой которую сделали в подзапросе
>>1550921 (OP)Здарова, аноны.У меня есть БД "студенты сдают проект".Основные сущности на пикрилейтед. Только вопрос вот в чём. У меня по ТЗ препод (teacher) может быть и руководителем (curator) проекта, и проверяющим (comission_member). Как рациональнее всего сделать разделение учителей на кураторов и участников комиссии? Обяз ли для этого создавать подсущности, которые будут хранить только айди? Хелп
>>1636672Кураторы хранятся в Project, а комиссия выставляет оценки через project mark. У них разные обязанности
>>1636681На каждый проект по 3-5 челов из комиссии ставят оценку проекту, которая хранится в project mark
>>1636681Тебе нужно две таблицы:-ФИО прподователя - ИД-Роль(куратор\мембер\оба) - ИДИ из них уже собирай по ключам.
Ребят, помогите с запросом. Я пиздец тупой.Есть 3 таблицы: Customer: id, name, lastname;Product: id, label, price;Customer_Product: customer_id, product_id, date;Запрос: Поиск покупателей, купивших меньше всего товаров.У меня получается только так:SELECT c.name, c.lastname FROM customer c INNER JOIN customer_product cp ON cp.customer_id = c.id GROUP BY c.name, c.lastname HAVING COUNT(cp.product_id) < 2 limit 3;Во что вставить вместо двойки, не пойму... Или вообще запрос не так делаю?
>>1635945>>1635954Все заработало, спасибо =)declare @t table ( id int, tovar varchar(250), grup varchar(250) )insert into @tvalues (1, 'яблоки', 'Фрукты'), (2, 'яблоки', 'Овощи'), (3, 'яблоки', 'Автозапчасти'), (4, 'яблоки', 'Шлакоблоки'), (5, 'Говно', 'Говнище'), (6, 'Груши', 'Фрукты') , (7, 'Груши', 'Овощи'), (8, 'Груши', 'Автозапчасти'), (9, 'Груши', 'Шлакоблоки'), (10, 'яблоки', 'Автозапчасти'),(11, 'яблоки', 'Автозапчасти'),(12, 'яблоки', 'Автозапчасти'); SELECT tovar, grupFROM @tWHERE tovar in ( SELECT tovar FROM @t GROUP BY tovar HAVING COUNT(*)>1 ) group by tovar,grup
Гайз, такая ситуация -- не могу выбрать литературу для вкатывания в sql(понадобится мне по работе в будущем) Может кто-нибудь рассказать свою историю успеха и кто как вообще учился этому ремеслу?(3 курс-кун)
Есть ли те, кто учил этот язык в университете и те, у кого его не было, кто изучал самостоятельно довольно поздно в 20, 25,30,35 лет? Сколько понадобилось времени, тяжело ли было? Пригодились ли вузовские знания?
>>1550940Наверное Селект доля продаж товара с НДС фром таблицаГроуп бай дисенд Если каждое дно, магазин, товар в отдельной строчке, если нет, отсортировать по параметру, который выведет отдельно каждый из необходимых и добавить дисенд, дабы это было в убывающем порядке
>>1638659Да, если постов больше определённого числа, называемого бамплимитом (здесь 500), тред перестаёт подниматься и начинает "тонуть".
https://2ch.hk/pr/res/1638710.htmlhttps://2ch.hk/pr/res/1638710.htmlhttps://2ch.hk/pr/res/1638710.html
>>1638472В 20 лет, пару месяцев заняло изучение. Ничего сложного особо нет, вся логика - суть операции над дискретными множествами и их подмножествами. И то не проный набор помоему.
Правильно ли я понимаю, что OUTER JOIN'ы вернут то, что вернул бы INNER JOIN, плюс (возможно) строки с NULL'ами?То есть что нельзя пропустить нормальную здоровую строчку без NULL'ов, используя INNER JOIN?
Анончики, подскажите как можно максимально анально огородить бд на MySQL? Нужно сделать так, чтобы пользователь не мог заглянуть в базу (пароля и логина от рута и пользователей привязаных к бд он знать не будет) при том, что сервер MySQL разворачивает локально у него на компе.
Анончики, как в Редисе сделать поиск ключей по значению?Например, в бд лежат ключи со значениями в виде словарей, и мне надо выбрать все ключи, у которых одно из полей словаря равно нужному мне значению
Не знаю туда ли зашел. Но проблемы в майрософт access. Создаю таблицы и пытаюсь их связать в "схеме данных". Связываю пункт с пункт с типом данных "счетчик" (пик1), он одинаков в нескольких таблицах. Когда связываю пик2, то ошибка пик3 происходит. Пункты эти одинаковы во всех таблицах, с одинаковыми параметрами. Пробовал связывать как до заполнения и любого вмешательства, так и после - результат пик3 всегда. Хотя есть одно но, если я уберу галки "каскадное обновление связанных полей", и "каскадное удаление связанных полей", оставив только "обеспечение целостности данных", то получается создать связь, но мне те галки нужны. Что делать?
>>1654084выдать учкетку ему с ограниченными правами.Или вариант для супермозга, создать вторую базу и настроить dblink между, а чтоб избавиться от @блабла.бла синонимо нахуяритьА если всерьез то я не понял вопроса
>>1653862outer - full, пустые могут что слева быть что справаinner - left, right, просто джойн. слова иннер аутер опускаются из-за ненадобности
>>1638472в универе научился писать селект из одной таблицы.учить в 23 начал, за 3 месяца ежедневного обучения я знал процентов 80% из того что пишут взрослые дяди.ну а там на их примере научился дальше.3 год работаю ораклистом. полет нормальный
>>1655060>outer - full, пустые могут что слева быть что справа>inner - left, right, просто джойн. Мало того, что ты отвечаешь не на заданный вопрос, так еще и хуйню несешь полнейшую.
>>1655074по факту ты хочешь создать внешний ключ на таблицу.одна из таблиц должна быть справочником иметь уникальный столбец. т.е. первичный ключ.Вторая же должна на этот столбец ссылатьсят.е. на нем строит параметр уникальности(первичный ключ)
>>1655117INNER JOIN это аналог JOINLEFT OUTER JOIN это аналог LEFT JOINRIGHT OUTER JOIN это аналог RIGHT JOINFULL OUTER JOIN это аналог FULL JOINПросто OUTER не бываетЕще бывает CROSS JOINЕще бывает NATURAL JOIN (не нужно это использовать)>поясни за хуйню>inner - left, right, просто джойн.Вот хуйня. Inner это просто inner, безо всяких left и right.Вопрос был про то, возможно ли теоретически упустить какую-то строчку, пользуясь INNER JOIN (а не OUTER'ами), если строчки с NULL'ами не нужны. Или же все, что добавляет тот или иной OUTER JOIN по сравнению с INNER'ом на тех же данных, обязательно содержит NULL.
>>1550921 (OP)Можно ли ввести разработку базы в контроле версий?Хранить "CREATE TABLE USERS" в Git-е и накатывать разные версии без потери данных в той самой таблице?
>>1655059У пользователя на компе устанавливается сервер MySQL (который из zip архива, а не инсталлером устанавливается, если эта информация важна, а то я не силен в этих ваших бд), на этом сервере я создаю бд с которой в дальнейшем будет работать некоторая программа. Так вот, задача заключается в том, чтобы не дать пользователю добраться до этой бд. Вот, например, пользователь может запустить сервер с параметром --skip-grant-tables и в дальнейшем сбросить пароль на root'е. Как ему можно ограничить этот функционал?
>>1655653Никак, если пользователь Админ.Не надо на компе у пользователя устанавливать СУБД, чтобы он в ней работал, для этого используют сервер.
>>1655455Можно, напиши скрипт, который будет превращать табличку в Json, например, и скрипт, который будет из Json инсертить данные в таблицу, с учетом identity_insert, конечно.Можно вместо json-а написать генерилку запроса, чтобы из таблички генерился запрос, типаmerge d_user as tusing (select 1, 'LOX'union all select 2,'PIDR') as s ...который бы мерджил данные с продашном
Работаю ETL разрабом, 170 тыщ на руки в ДС. 29 летСтек - sql server,teradataНу и SSIS,Pentaho и прочая залупаИгогда переписываю или пишу процедуры и прочую хуетуКуда двигаться дальше - хзКак выбраться из говна, пойти в HADOOP и начать учить Джаву...
>>1656585Аналогичная история была.Уволился с последней такой работы, тока 200к платили.Заебало говна разгребать.Решил, что уволюись, выучу всякие там Angular для фуллстака в дополнение к шарпу, потом бигдату. В итоге, месяц я ни хуя не делал, на второй месяц ко мне обратился знакомый с позапозапршлой работы и подкинул заказ.Потом еще заказ подкинули, и еще - все по связям с предыдущих мест. Я открыл ИП и стал работать на себя, получилось еще поднять доход, а, самое главное, теперь я сам себе хозяин, работаю из дома, сам говорю, сколько стою, в общем, куча профитов.Проблема только в том, что я так ни хуя нового и не выучил почти, но я тут понял одно - либо учишься, либо зарабатываешь нормальные бабки тем, что умеешь. И решил я заработать хотя бы 10 лямов, чтобы их пустить в инвестиции, а потом уже жить в основном с доходов от ценных бумаг, а освободившееся от зказов время (не всех думаю дропнуть, но большинство) пускать уже на всё, что захочу, включая учебу, если смогу себя заставить, конечно.
Антуаны такой вопрос.Есть таблица видаИмя | Поле1 | Поле2 | Поле3 | IDВ таблице есть одинаковые строки с разными ИД. Скажем есть ИД 2 и ИД 3, в рамках этих ИД есть одинаковые строки отличающиеся только ИД, так же есть много других строк\ид, которые не повторяются, пересечения только в рамках строк у которых ИД 2 и 3.Соотвественно мне нужны строки с ИД 2, которых нет в ИД 3. Вроде как просто решается подзапросом, но какой-то топорный метод, нельзя ли что-нибудь поизящней с OUTER JOIN прикрутить?
Сап аноны, ньюфаг влетает в тред, может кто нибудь объяснить как создавать темпоральные данные в MySQL а то порывшись в инете я ничего не нашел
>>16568531)Каждая строка уникальна? Полные дубли есть?2)ID уникален?3)Что значит: "нет в Id3" ? Требуются строки с id2 и таким набором полей которого нет ни для одной строки с id3?4) для других id могут быть аналогичные ситуации? Требуется ли фильтрация для них?
Анончик помоги. Ебусь который час, пытался гуглить, но я даун. С БД ни разу в жизни не контактировалне считая майкрософт аксессНам скинули файл с БД какой-то, сказали открыть через VS, я открыл. По заданию нужно её заполнить чем-нибудь.Я создал вот такую хуйню пик1.Собсна вопросы:1. Как сделать тут связи?2. Как заполнить БД чем-нибудь?
Как эти ебучие запросы мониторить? Чтоб просто терминал отдельный открыть, и у меня все>SELECT suka FROM blyad FROM ja=pidoras;там сразу отображались? Пиздос, неужели настолько юзабилити не продумано в этом говне?
>>1659998Ладно, блядь, с этим разобрался. Но как посмотреть, что SQL отвечает? А то я ебал глазами парсить эти километровые генерированные запросы и думать да гадать, с какого хуя по таким юзерам у меня инфа приходит, а по таким - пустота. Будь у них очко share-ключами обколото...
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ СУКА НАХУЙ БЛЯДЬ РОТ ЕБАЛ ВАШЕГО MYSQL ЕБУЧЕГО СУКА НАХУЙ, ПОЧЕМУ ОН ДАЖЕ БАЗУ ДАННЫХ ДРОПНУТЬД Р О П Н У Т Ь , К А Р Л ! ! !НЕ МОЖЕТ, НЕ ПОТРАТИВ НА ПОЛНЕДЕЛИ МОЕЙ И БЕЗ ТОГО ВСРАТОЙ ЖИЗНИ-ТО НАХОЙ, А? А???? А БЛЯДЬ???!??!?!?!?!?!??!?!?!??!!
Вечер добрый. Столкнулся с такой проблемой, могу подключиться к датабазе sqlexpress на моем компьютере с любого компьютера подключенного к этой же сети. Теперь вопрос, как сделать так, чтобы к этой датабазе можно было подключиться с любого компьютера через интернет. ВПН не предлагать
Мальчишки, делаю SaaS хуйню. Имеются 3 тарифа (3 записи в таблице тарифов). Пользователь оплачивает какой-нибудь тариф на месяц, но спустя пару дней понимает, что всё хуйня и хочет вернуть деньги. Система рассчитывает сумму возврата исходя из стоимости тарифа и количества неиспользованных дней. Но что, если в тот момент, когда пользователь передумал использовать сервис, я подниму стоимость тарифа в 2 раза. Получается, система вернет совсем другую сумму. Следовательно, надо где-то в другой таблице хранить данные о том, по какой цене пользователь покупал тариф. Получится много лишних данных.Я решил сделать по-другому. Когда я меняю стоимость тарифа, я на самом деле не меняю тариф, а создаю новую версию этого тарифа, а к старой версии добавляю FK на новую. И когда у старого тарифа больше не остается подписчиков, он удаляется из базы.Норм решение, какие подводные? Или может уже есть какие-то best practices для подобного?
хай, ананасы!есть огромный таблица лог вида:userid | timestamp | actionsесть требованиеuserid | date_start | date_endкак из первой таблицы найти записи нужных юзеров в указанном для него периоде? (для всех юзеров периоды, с date_start по date_end разные)
В чем хранить контент имиджборды?Для себя делаю скрапер двача, возник резонный вопрос в чем хранить сообщения/треды. Пока что есть безотказный вариант для аутистов - просто json на диске.Что нужно от БД - быстрая выборка всего треда по его id, хранение нескольких версий одного и того же поста в треде, в перспективее - полнотекстовый поиск по постам.Соответственно, мало вставок и очень много выборок.Господа DBA, подскажите что выбрать? В базы данных умею слабо, по работе с динамкой только работал.
>>1550921 (OP)Добрейший вечерочек, господа апельсинусы. Делаю учебную хуйню про архитектурную организацию, сотворил модель данных.Прогер во мне умер уже пару лет назад, память отлетела внахуй, но делать приходится. С инструментами разработки, можно сказать, уже не знаком, с тем, как подлезть к началу собственно реализации, тоже. Подскажите, чем делать БД и на чем быстро/удобно можно быстро намутить приложение для работы с этой самой БД?
Аноны, прислали тестовое не на бд разраба но там есть задание про построить объектную модель данных с типами связей по описанию процесса. Я так понял это к ообд или как это называется? Как это делается? Лол я максимум, что про реакционные модели знаю. Понятно, что тестовое я завалю просто интересно
Бля, какие же хуесосы этот MySQL делали, я ебал... Элементарно не могу нагуглить, как переключаться между двумя базами под одним именем, чтоб не загружать-выгружать образ каждый раз, когда нужно поработать с бэкапом с продакшна и вернуться обратно на легкий дэвовский. Это пиздец, товарищи. Минус полчаса жизни, я не шучу нахуй.
>>1669386Алсо, эта хуета явно недоиспользует ресурс (RAM, CPU) моей пекарни, чтоб грузиться быстрее, блядь. Я не верю, что все в SSD упирается, там ведь гигабайт с небольшим всего, а грузится оно минут десять.
сап, двачя тут хотела поинтересоваться, можно ли как-то увидеть удаленные из диалога (загруженные туда же) видео? поискала, в тырнетах пишут, что нужна прямая ссылка. как ее получить если само видео указывается пустым сообщением? еще такая фишка, что если живешь в евросоюзе, они тебе обязаны предоставить при запросе группы, в которых ты админил и период, удаленные фотки и видео, голосовые и тд. можно ли это как-то наебать, или попросить кого-то из евросоюза с моей страницы вк запросить эти данные? или, может, есть какие-то сайты, где какие-то уполномоченные люди сие замечательной социальной сети могли бы за отдельную денюжку предоставить эту инфу? кто знает?
>>1663447Однозначно да, а то и больше. Всё по-прежнему, спрос на хороших скл-щиков большой, задания на собесах прежние.>>1664151любую субд реляционную. Если лично для себя делаешь, ставь Sql server developer, думаю, это лучшим решением будет, как минимум решение своих проблем сможешь быстро находить.
>>1550921 (OP)Узнал чтота же Postgres связывается с приложениями через сокеты (как правило порт 5432), есть ли люди которые ставят эту БД на удаленном сервере, а не на localhost? В принципе так можно делать, но ебучие HTTP-запросы ведь идут пиздец как долго. Есть ли резон так делать?
>>1674326Если для тебя критично, что запросы из бд идут "пиздец как долго", то скорее всего проблема в твоей архитектуре.Я не ванга и не знаю, что ты там делаешь, но можешь попробовать к своему приложению какой-нибудь кэш прикрутить, или типа того.Вообще, в индустрии все давно на микросервисах с HTTP, и ничего, как-то живут люди.
>>1674793Хотя, если тебе бд нужна как внутреннее хранилище данных приложения, то вместо Postgres возьми идущую в качестве батареек к питону sqlite3
В той самой книге Дейта сказано (глава 3.2) что в СУБД нет никаких указателей, связывающих одну таблицу с другой, а есть только явное задание значений, помещенных в позиции столбцов и строк таблицы Это и сейчас правда? (книга-то в 70х еще издавалась)
>>1662918Охуенные вводные, братан.Во первых, какой тип данных имеет timestamp? date? time? datetime? datetime2? Во вторых, каким образом ты собрался разбивать дату СОБЫТИЯ на НАЧАЛО и КОНЕЦ, если СОБЫТИЕ привязывается к определенной отметке во времени, а не к периоду?Я, конечно, добоеб и может чего не знаю, но тебе нужно будет писать отдельный запрос под каждого юзера при помощи UNION
Норм книжка чтобы базы данных поизучать? Так понимаю, что sqlite легче всего разворачивать и в ней не только о нем, а вообще о SQL и том как БД проектировать.
Суп БДач. Можешь подсказать по хардкору:Хочу сделать бота с кусрами в образовательных целях, но хочу сделать все максимально правильно.Короче, какие БД для деревьев лучше подходят SQL или NoSQL?Я подумал, что курсы лекции это вложенные структуры данных.Т.е. документ это лист. Последняя структура данных в дереве. Но есть составные ветви типа "курс залупа ерохи"->"лекция 666"->"урок 1488"->"документы урока".Но может быть и сразу "Курс залупа ерохи" -> "документы курса".Вот я немного подустал думать какую же базу взять. SQL или NoSQL.
>>1679057Очень просто.Если ты хочешь организовать поиск, например, по названию курса или документа, то не стоит использовать обхектную БД.Плюс почти все реляционки сейчас умеют в json, так что вообще особо не вижу проблем использоать mysql/postgres/ms sql.там хотя бы структура понятная будет.
Есть одна таблица с чеками, что-то вроде:Наименование Сумма Начало Конец-покупка1 300р 12:00 12:30-покупка2 125р 13:05 13:20Нужно разбирать по минутам, т.е.Покупка1 длилась 30 минут, это по 10р минуту, т.е. одна строка должна превратиться в 30 строк по 10р.Как это можно реализовать?
>>1679163Ну я понемногу на этом и начал сходиться. В общем с реляционной никаких проблем не будет. Спасибо.По сути для всей вложенности нужно будет только две модели это "Ветвь" с указанием типа и parent'a и "Лист". Хотя если вдруг я захочу вложенность всего курса вывести потребуется большое количество джоинов.
>>1679237Ну так построй рекрсивно поминутный набор дат и сджойни его со своей таблицей.Другого варианта "размножить" строки за 2.5 года я так и не придумал.
>>1680364Ну хз, мне не разово это делать, плюс там длительность может быть больше часа, не хранить же сутки в минутах . Пока рассматриваю вариант делать apply на цикл с while, но что-то выглядит как костыль, и по реализации есть ряд вопросов.
Ребятки, совсем убил меня этот SQL, помогите плиз.У меня есть Пользователь, у Пользователя есть Каталог (связь через кросс-таблицу, многие-ко-многим), в Каталоге валяется Ресурс (тоже связь многие-ко-многим через кросс-таблицу). У Ресурса есть колонка Алиас, которую пользователь устанавливает через бизнес-логику. Как сделать так, чтобы Алиас был уникальным в разрезе Пользователя? Я только в unique index умею, но он не подходит, потому что два разных пользака могут задать одинаоковый алиас своему ресурсу и это нормально. Так что одинаковые значения могут быть в этом столбце.Как быть? Можно какой-то справочник создать отдельный, типа Ид Пользователя - Ид Ресурса - Алиас этого Ресурса? Или какой индекс на несколько таблиц, но я хз как оно делается и можно ли это? Куда хоть копать, что гуглить?
Представим, есть две примитивные одноколоночные таблицы:CREATE TABLE a (url VARCHAR(255));CREATE TABLE b (host VARCHAR(255));В таблице А – url'ы:http://2ch-ebach.hk/abchttps://google.com/?query=xxx...В таблице B – хосты:zhopa.com2ch-ebach.hkyahoo.cn...Как построить DELETE запрос, которая удалит из А все строки, у которых есть подстрока из Б?Что-то типа DELETE FROM a WHERE url LIKE '%'+(SELECT host FROM b)+'%', но чтобы было не плодом моей фантазии.
>>1550921 (OP)Сап, покажете пример решения? Всего заданий много, но мне хотя бы пример одного увидеть. Я так понял "весят больше чем родитель" - это нужен подзапрос. Но как мне реализовать в запросе связь между животными и их родителями?
>>1681081Составной ключ сделай. Модно вобще хэш вычислять и добавлять индкс. Либо в одной из таблиц генерацию делай не с 1(ну тут важно не обосраться потом)
>>1681528ДержиSELECT nameFROM animals as childWHERE weight>(SELECT weightFROM animals as parentsWHERE parents.parent_id=child.parent_id)>>1681371В общем видеDELETE FROM tableAWHERE ROWID IN ( SELECT ROWID FROM tableA bWHERE УСЛОВИЕ(Тут можно селект к первой таблице );НО, если у тебя таблицы большие тебе придётся сравнивать урлы полнотекстовым поиском, а это пиздец. Как вариант сделать им INTERSECT и по нему уже делать удаление. Ну или если тебе нужно просто уникальные записи сделать EXСРТ ну тут хз как лучше, помоему это говно тоже весьма затратное по ресурсам
>>1681797я нубас полный) сейчас курю мануалы, но идёт тяжело без примера>>1682854таблицы все что на скрине, маленькие>>1682880сейчас поразбираюсь в твоём решении, спасибо
Очень помогли вот эти курсы, конечно поверхностно, но нормально.https://stepik.org/lesson/297515/step/7?unit=279275
>>1685765Даже больше тебе скажу, не может быть нескольких pk на одной таблице.Можнт быть составной PK (из нескольки колонок)
>>1563202лол. ну дак оракл закешировала части запросов ну и выдает тебе их мгновенно.ты бы сравнил лучше запросы разного характера исполняемые параллельно с разными данными.
.Now you'll see why we needed groups: to look for specific values in a particular part of the DataFrame. We'll use our new function, but first we need to think of an argument. Let's group the DataFrame by the user_id column, so group_name will represent the user and the corresponding piece of data will be handled by the group_data variable. Now that we've decided what data to use as the argument, we can save it to genre_grouping .Call the get_heavy_listener function and pass genre_grouping as its argument. Save the result in the user_id variable and print it. Note that the algorithm is not perfect: as soon as it finds a user with 50+ listens, it stops searching. But here we have at least one of our unknown music lovers! Аноны вообще не понимаю задания - помогите
Как "читать" эту таблицу? Связи показывают внешние ключи к другим таблицам, но почему их блин так много, в citizens.import_id их вообще 3 штуки, а некоторые еще и выделены красным?
>>1691761А почему вдруг там красным что-то выделено? От relations.import_id аж 2 связи в citizens.import_id идут. С фига ли?
На кой иногда делают отдельные таблицы с одним единственным полем? Например есть таблица Category где одно поле - NAME VARCHAR? Вот нахрена? Почему имя категории нельзя засунуть в ту же таблицу, к которой категории и относятся, скажем это таблица Games?
>>1550921 (OP)Анон, посоветуй годный курс по БД. Устраиваю себе интенсив перед завтрашним собесом. Ранее БД нюхал, на уровне join'ов, но даже их мне лучше повторить. Про индексы только слышал.
>>1694781https://www.udemy.com/course/sql-oracle-certification/я сейчас этот смотрю, есть на торрентах.
>>1694826Секрет, вдруг ты меня завтра будешь собеседовать и такой - "ага, знаю я тебя, двощер, пиздец тебе"
Я немного новичок в sql. Подскажите, пожалуйста, вот есть у меня 2 таблицы,table1 и table2. И там и там одинаковое поле id. Как мне посмотреть на все данные правильно в этих таблицах без лишнего мусора? Обычным селектом я получаю 2 столбца id, которые еще и не равны друг другу и мне надо указывать id, который принадлежит определенной таблице, чтобы использовать его - table2.id.
Памахите. Вот есть столбец в таблице с 10 миллионами записей. В ней есть столбец в котором хранится всего 15 видов значений - числа от 1 до 15, для каждой записи одно из этих чисел в этой колонке в общем. Допустим я хочу сделать order by по этому столбцу. Насколько дольше будет выполняться запрос с order by чем без него? Это вообще существенная величина или нет?
>>1697143> Есди есть индекс, то тнет.Но я в 3 разных статьях читал, что индексы навешивать имеет смысл только если значения в колонках уникальные. Если там очень много повторяющихся, то смысла в индексе большого нету. Это соответствует действительности?
Есть кто работал с SQLite?У меня в таблицах первичным ключом будет поле с GUID вместо числового с автоинкриментом.Подскажите, как лучше таблицы создать с опцией WITHOUT ROWID или без нее в этой ситуации?Это опция позволяет делать поле, которое является первичным ключом, кластерным индексом.Без этой опции у каждой таблицы создается числовое поле ROWID которое и будет счиаться кластерным индексоа.Так вотКак у них в документации написаноhttps://www.sqlite.org/withoutrowid.htmlЧто стоит использовать WITHOUT ROWID когда ключевое поле не числовое и когда строки не занимают очень много места.Также эта опция уменьшает ускоряяет поиск и уменьшает место занимаемое строкой за счет того что нету поля ROWID.Но говорят что использование гуида в качестве кластерного индекса повышает фрагментацию на диске и что база разбухает быстро от этогоПравда это статься про MS SQL Server, не знаю насколько это применимо к SQLitehttps://www.sqlskills.com/blogs/kimberly/guids-as-primary-keys-andor-the-clustering-key/
Прочитал "Изучаем SQL" Алана Бьюли, очень понравилась. Теперь нужно перейти на углубленное изучение PostgreSQL, посоветуйте, пожалуйста, лучшую книгу для этого. Желательно, похожую на книгу Бьюли.