Этого треда уже нет.
Это копия, сохраненная 24 января 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
15767555835440.jpg9 Кб, 400x400
А вот и новый оптимизированный баз данных тред, /sql/ 1638710 В конец треда | Веб
А вот и новый оптимизированный баз данных тред,
в котором мы
-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания
-Разбираемся, почему PostgreSQL - не Oracle
-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
-Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обещстве
-Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
-Анализируем, как работает поиск вконтакте
-Игнорируем конкаренси-шизика, не понимающего, зачем базы данных нужны
-И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно

Поехали!
2 1638712
Гайз, такая ситуация -- не могу выбрать литературу для вкатывания в sql(понадобится мне по работе в будущем)
Может кто-нибудь рассказать свою историю успеха и кто как вообще учился этому ремеслу?
(3 курс-кун)
3 1638866
>>638712

>3 курс-кун)


Ты уже работать должен.
4 1638898
>>638866
Почему?
5 1639028
>>638712
Алан Бьюли - Изучаем SQL
6 1639074
>>638898
Не слушай его, это чмо без ВО. Тебе еще магу надо окончить прежде чем идти куда-то
7 1639865
>>639074
А сам что закончил?
8 1639876
>>639865
Баумана
9 1640181
>>638710 (OP)
Стоит ли пытаться городить linked list в Postgres или такую хуйню лучше в NoSQL мутить?
10 1640216
11 1640283
>>639876
А кафедру?
12 1640448
>>638710 (OP)
Предыдущий >>1550921 (OP)
13 1640580
Можно ли найти работу после самостоятельного изучения sql, не имея в о по специальности программирование и даже по смежной (в/о гуманитарное). Как относятся к таким людям?
14 1640862
Двач, поясни по простому чем mongodb лучше/хуже чем postgresql(ну и вообще sql) и когда что лучше подходит?
15 1642056
Вкатываюсь в работу со складом, подскажите годную инфу что почитать/посмотреть по складским задачам
16 1642082
>>638710 (OP)
Братаны, нужен адекватный механизм для удаления устаревших данных из БД. Можно конечно ставить что-то типа DateField и на сервере каждые n минут проверять разницу между текущей датой и выставленной, если она превысила порог в скажем 30 дней, мы удаляем запись. Но что если сервер ляжет и его время сбросится в ебеня?
Как вообще реализуют удаление устаревших данных в БД (вне зависимости, реляционная это база или noSQL)?
17 1642119
>>642082
Нельзя раз в день запускать?

> сервер ляжет и его время сбросится в ебеня


Тогда отсчитывать разницу не от текущей, а от последней добавленной, например, но это при условии, что новых записей с неправильным временем не появляется. А если появляются, то ничего не поделать и придётся при каждом инсерте проверять триггером, что нету более новых записей.
18 1642212
>>640580
Если ты о sql курсиках - каким-то джуном дата аналитиком можно.
И то, нужны еще доп. знания. Если прорываться куда-то в банк, телеком то нужно еще немного подчитать о екселе, т.к. без него увы никуда.И хотя бы одном аналитическом пакете (чаще всего Power BI)- важно знать что такие есть и зачем они, остальное - наживное. Типа когда тебя на собесе спросят знаком ли ты с какой-то приблудой, ты не обосрешься, а скажешь типа:
- "Немного опыта, знаю что используется для построения отчётности о количестве собраного говна в секунду"
И обычно этого достаточно для мимоджуна во всякие полулегальные банки.
Если прорываться в айти - то хоть немного подчитать о джире, гугл таблицах. А главное быть в чуть курсе стрима из которого продукт конторы куда ты собеседуешься.
мимо-вкатившийся
19 1642263
>>642082
Сделай двойную проверку, вторым запросом проверяй промежуток между удаляемой и текущей, если больше 2 месяцев скажем, не удаляем ничего
20 1642284
>>642082

> Но что если сервер ляжет и его время сбросится в ебеня?



Атомный источник, ntp сервер, прописанная в поттердэ синхронизация в момент запуска, всё это в противоядерном бункере в противошоковой камере на подвесах.
Снимок.PNG100 Кб, 619x527
21 1642509
>>638710 (OP)
помогите плес написать (это изи, я знаю, прост нюфаг)
⦁сосчитать количество сольных артистов, чь альбомы продались тиражом более 1000 (вывести только число).
⦁отобразить всех исполнителей, в списке жанров которого есть “pop” in it (без дубликатов; необходимые поля: artist, genre).
⦁ выбрать Group leaders (name + surname, date of birth, group name, group description) и их лучшие продаваемые альбомы в 2020 году и количество их песен.
⦁найти название альбома второго по рейтингу
⦁добавить песню “World” с genre ID 8 в album ID 2.
⦁заменить национальность лидера группы с ID 42 на значение: ID 14.

заранее спасибо, анончики
22 1642523
>>642509
Вы заебали студенты ебанные, хоть бы блять начал решать для приличия, и спросил что непончтно. Иди нахуй, чтоб тебя отчислили ленивый уебок. Мы не твоя личная армия.
image.png64 Кб, 300x254
23 1642887
>>638710 (OP)
сап, ночной
обращаюсь ко всем бывалым анонам. какую nosql субд выбрать, при условии, что чаще всего при работе с бд будут выполняться много операций чтения и записи МАЛЕНЬКИХ данных (размером ~10-30 байт)? пока что в гугле нихуя не нашел, но может вопрос будет для кого-то супер очевидным. добра.
24 1642929
>>642887
А как гуглил? Я вот погуглил NoSQL Highload, и вроде возвращает варианты. Даже бенчмарки какие-то
25 1643126
Так, пацаны. Поясните для маленьких и тупых чем mongo лучше(хуже) postgres и когда что?

Вообще, какие юзкейсы?
26 1643133
>>643126

Уже ничем, попав в интырпрайз из монги усиленно переделывают обычную реляционную СУБД - уже добавили транзакции, следом и статичная схема появится, а там уже и до нормальных форм недалеко.
27 1643137
>>643133

А в монге сейчас разве нет такого понятия как нормализация?
28 1643138
Как поступать если джионишь по полям с разным типом данных? Какой бескпартис? Просто если в джоине конвертить смотрится совсем уж уродливо.

Вот например у меня Duble, нужно сделать джоин к varchar, так мне приходится 2 раза кастить(сначало в инт, чтоб убрать нули, потом уже в текст). Но наверное есть способы получше?
29 1643378
как уже научиться щелкать эти джоины?
30 1643386
>>643378
А что у них сложного?
31 1643518
>>643378
>>643386
Вопрос другой но в тему: как часто JOIN'ы вообще юзаются в SQL-коде?
32 1643520
>>643518
Очень часто. Чем нормализованней - тем чаще.
33 1643937
В рот ебал эти олимпиадная задачки на sql-ex.
В прикрепе задание и таблицы текущей схемы.
https://pastebin.com/tkGYpBgF - здесь решение, которое хуй знает как валится.
Хуже всего что на этом дремучем sql-ex при прхождении запроса на второй и третьей базе не показывают результирующие данные, в то время как на всех нормальных сервисах типо leetcode'a и прочих, всегда есть какой-то референс.
34 1644035
>>643937
Чем дальше в лес, тем глубже трясина.
https://pastebin.com/1Eh494wV
В этот раз заговнокодил на славу, с кучей соединений строк и их реверсом, на второй базе выдает меньше на 16 чем нужно, до коле?
35 1644080
>>638710 (OP)
Есть какой-то сборник задач по SQL? Желательно онлайн. Ещё лучше с ответами.
Хочу руку набить на запросах.
Например, есть две таблицы, такие-то поля, такие-то данные сделай такую выборку, сделай такую же, но отсортируй данные по дате. Сейчас я спокойно пишу запросы там где нужно, но с гуглом. Надо практики побольше, а сам я ничего особенного из головы придумать не могу.
36 1644083
>>643937

>на этом дремучем sql-ex при прхождении запроса на второй и третьей базе не показывают результирующие данные


В факе даже написано почему - чтобы люди разбирались с сутью задачи, а не подгоняли ответы.
37 1645362
>>642212
Понятно. Спасибо. Изучаю самостоятельно.
39 1645482
Тут есть те, кто выучил язык самостоятельно и уже начали работать?
40 1645484
>>643518
Джон - просто объединение. Объединяешь с помощью ключа - того, что есть в любом коде. Объединение может быть тоже разное
Правое, левое, классическое.
41 1645608
>>645479
Да, я уже тред почитал, нашёл. Всё равно, спасибо!
42 1647998
Используется ли в СУБД (например Postres) поиск через хеш-таблицу с быстродействием О(1)? Или это фишка только NoSQL?
43 1648003
>>645484
Вопрос в том, как часто это юзается
44 1648021
>>647998
нет
45 1648022
>>647998
нет
46 1648041
>>648022
Почему? Это ж быстро и модно
47 1648142
48 1648267
>>638710 (OP)
Вечер в хату! Че насчет scylladb скажите?
image.png69 Кб, 1466x627
Строковые функции 50 1648362
>>638710 (OP)

Двач, сегодня нужно было срочно по-быстрому преобразовать емейлы уровня ivan.petfVKrovANUSdoma3n2inPUNCTUMcoAVNm в фамилии типа Petrov.
Мейлы из списка только двух видов: ivan.petroxDtvANUSdsr0omainPUNCTUMcojlgm и, допустим, ivan.g.petlo|rovANUSdomaar7inPUNCTUMcOg0om (когда ящики имя.фамилия заняты, то вставляют ещё букву отчества).
Потом фамилию в этом виде при определённых условиях нужно было добавлять к ещё одной строке, но суть в том, что само преобразование получилось очень громоздким.

Я вспоминал и искал все подряд строковые функции и лепил, лишь бы быстрее доделать, и оно таки заработало.
А потом представил ситуацию, что если домен будет нетипичным, или у человека будет двойная фамилия, в общем, всё опять нагромоздится, или пойдёт по пизде.
Приложил этот кусок запроса с прикрученными тестовыми данными. Анон, можешь пояснить за то, как корректно юзать строковые функции, и показать, как это нужно было делать на самом деле?

declare @t as table (
row int
,fio varchar(255)
)
insert into @t
values
(1,'ivan.g.peN0AtrovANUSd63/omainPUNCTUMcu,zom')
,(2,'ivan.peJD$trovANUSdofd^mainPUNCTUMcV&Wom')
,(3,'ivto3an.petrovANUSdombp2ainPUNCTUMneNYxt') -- нетипичный домен
,(4,'ivanKhI.g.petrov.vodkinANUSdomaJ$.inPUNCTUMcUKRom') --нетипичный емейл
--SELECT * FROM @t

SELECT
fio as [login]
,STUFF(

IIF(
LEN(REPLACE([fio],'@domain.com','')) - LEN(REPLACE(REPLACE([fio],'@domain.com',''),'.', ''))=1 --если в логине одна точка, например ivaNrKn.ivanovANUSdo:#KmainPUNCTUMcoU89m
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),''),'@domain.com','') -- удаляем всё после первой точки, и реплейсом добиваем @domain.com
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),''),'@domain.com','')) -- удаляем всё после второй точки, это на случай, если в логине две точки, например ivan.iQhF.ivanovANUSd8b,omainPUNCTUMcoe*Mm

, 1, 1, UPPER(LEFT(IIF(LEN(REPLACE([fio],'@domain.com','')) - LEN(replace(REPLACE([fio],'@domain.com',''),'.', ''))=1 --если в логине одна точка, например ivan.igphvanovANUSd%AbomainPUNCTUMcdMdom

,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),''),'@domain.com','') -- удаляем всё после первой точки, и реплейсом добиваем @domain.com
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),''),'@domain.com','')) -- удаляем всё после второй точки, это на случай, если в логине две точки, например ivan.i.ivan@_XovANUSd&NUomainPUNCTUMckVDom

,1))) as [last name]

FROM @t
image.png69 Кб, 1466x627
Строковые функции 50 1648362
>>638710 (OP)

Двач, сегодня нужно было срочно по-быстрому преобразовать емейлы уровня ivan.petfVKrovANUSdoma3n2inPUNCTUMcoAVNm в фамилии типа Petrov.
Мейлы из списка только двух видов: ivan.petroxDtvANUSdsr0omainPUNCTUMcojlgm и, допустим, ivan.g.petlo|rovANUSdomaar7inPUNCTUMcOg0om (когда ящики имя.фамилия заняты, то вставляют ещё букву отчества).
Потом фамилию в этом виде при определённых условиях нужно было добавлять к ещё одной строке, но суть в том, что само преобразование получилось очень громоздким.

Я вспоминал и искал все подряд строковые функции и лепил, лишь бы быстрее доделать, и оно таки заработало.
А потом представил ситуацию, что если домен будет нетипичным, или у человека будет двойная фамилия, в общем, всё опять нагромоздится, или пойдёт по пизде.
Приложил этот кусок запроса с прикрученными тестовыми данными. Анон, можешь пояснить за то, как корректно юзать строковые функции, и показать, как это нужно было делать на самом деле?

declare @t as table (
row int
,fio varchar(255)
)
insert into @t
values
(1,'ivan.g.peN0AtrovANUSd63/omainPUNCTUMcu,zom')
,(2,'ivan.peJD$trovANUSdofd^mainPUNCTUMcV&Wom')
,(3,'ivto3an.petrovANUSdombp2ainPUNCTUMneNYxt') -- нетипичный домен
,(4,'ivanKhI.g.petrov.vodkinANUSdomaJ$.inPUNCTUMcUKRom') --нетипичный емейл
--SELECT * FROM @t

SELECT
fio as [login]
,STUFF(

IIF(
LEN(REPLACE([fio],'@domain.com','')) - LEN(REPLACE(REPLACE([fio],'@domain.com',''),'.', ''))=1 --если в логине одна точка, например ivaNrKn.ivanovANUSdo:#KmainPUNCTUMcoU89m
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),''),'@domain.com','') -- удаляем всё после первой точки, и реплейсом добиваем @domain.com
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),''),'@domain.com','')) -- удаляем всё после второй точки, это на случай, если в логине две точки, например ivan.iQhF.ivanovANUSd8b,omainPUNCTUMcoe*Mm

, 1, 1, UPPER(LEFT(IIF(LEN(REPLACE([fio],'@domain.com','')) - LEN(replace(REPLACE([fio],'@domain.com',''),'.', ''))=1 --если в логине одна точка, например ivan.igphvanovANUSd%AbomainPUNCTUMcdMdom

,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),''),'@domain.com','') -- удаляем всё после первой точки, и реплейсом добиваем @domain.com
,REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),''),'@domain.com','')) -- удаляем всё после второй точки, это на случай, если в логине две точки, например ivan.i.ivan@_XovANUSd&NUomainPUNCTUMckVDom

,1))) as [last name]

FROM @t
Строковые функции 51 1648368
>>648362
Попытка отвязаться от почтового домена и двойной фамилии нагромождает запрос ещё сильнее, а заменить регистр второй части двойной фамилии мне уже не удаётся.

declare @t as table (
row int
,fio varchar(255)
)
insert into @t
values
(1,'ivan.hWYg.petrovANUSdomaiuH,nPUNCTUMcvQ;om')
,(2,'ivan.pet5uqrovANUSdomWnrainPUNCTUMco9~Vm')
,(3,'ivan.petc@_rovANUSdoCC~mainPUNCTUMncS*et') -- нетипичный домен
,(4,'ivan.g.petrov.vod%tTkinANUSdo3=4mainPUNCTUMc,&fom') --нетипичный емейл
--SELECT * FROM @t

SELECT
fio as [login]
,LEFT(
STUFF(

CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
, 1, 1,
UPPER(
LEFT(
CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
,1)))
,CHARINDEX('@',

STUFF(

CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),'')
END
, 1, 1, UPPER(LEFT(CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
,1)))

,1)-1) as [last name]

FROM @t
Строковые функции 51 1648368
>>648362
Попытка отвязаться от почтового домена и двойной фамилии нагромождает запрос ещё сильнее, а заменить регистр второй части двойной фамилии мне уже не удаётся.

declare @t as table (
row int
,fio varchar(255)
)
insert into @t
values
(1,'ivan.hWYg.petrovANUSdomaiuH,nPUNCTUMcvQ;om')
,(2,'ivan.pet5uqrovANUSdomWnrainPUNCTUMco9~Vm')
,(3,'ivan.petc@_rovANUSdoCC~mainPUNCTUMncS*et') -- нетипичный домен
,(4,'ivan.g.petrov.vod%tTkinANUSdo3=4mainPUNCTUMc,&fom') --нетипичный емейл
--SELECT * FROM @t

SELECT
fio as [login]
,LEFT(
STUFF(

CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
, 1, 1,
UPPER(
LEFT(
CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
,1)))
,CHARINDEX('@',

STUFF(

CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),'')
END
, 1, 1, UPPER(LEFT(CASE WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=1
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=2
THEN STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+1),'')
WHEN LEN(LEFT([fio],CHARINDEX('@',[fio],1)-1)) - LEN(REPLACE(LEFT([fio],CHARINDEX('@',[fio],1)-1),'.', ''))=3
THEN REPLACE(STUFF([fio], 1,CHARINDEX('.',[fio],CHARINDEX('.',[fio],0)+2),''),'.','-')
END
,1)))

,1)-1) as [last name]

FROM @t
52 1648369
блядь, налипло табуляций
53 1648589
Приветствую, двощане
вопрос следующего характера: существует Data Grip (предположу что это СУБД от jetbrains)
Друг накатал там пару таблиц в полноценную базу, скинул архив на облако, я скачал
а теперь выяснил, что не могу "открыть" папку как проект точнее могу но потом на стадии визуацизации таблиц вижу говно
В теории разбираюсь очень неочень, если пишу не туда пошлите куда надо пж
54 1648995
>>648362
Чото ты хуйни нагородил, я б за такое пидел ногами но я сам тоже из этих. Простой сделай split.
55 1648996
>>648995
*пиздил
56 1648998
>>648589
Чтоб её открыть нужно чтоб был сделан нормальный экспорт или на худой конец бекап, просто так что-то открывать заебешься.
57 1649108
Что почитать по postgis?
Попал на проект, где эта шняга используется во всю, а я нихрена в ней не понимаю
58 1649178
Товарищи, перевели в новый проект, там юзают Oracle. Ранее работал с MS SQL, чутка с Postgres и Mysql.
Есть какой-то материал для быстро входа в Оракл? Я понимаю что основные концепты остаются те же, но есть ведь нюансы. Особенно интересует вопрос взаимодействие с БД, администрирование, какие тулы есть, каким клиентом лучше пользоваться и структура СУБД как таковой.
59 1649214
>>649178
Тут никто не хочет отвечать на вопросы по вкату, только одни сеньоры ДБА сидят и иногда помогают друг другу с ебически сложными задачами.
60 1649218
>>649178
У меня оракл на соседнем проекте, иногда приходится с ним взаимодействовать. У меня срака перманентно горит из-за отсутствия стандартных функцией скуля(банально TOP). Взаимодействие через Oracle SQL Developer( ну тебе там местные ораклиытсы должны пояснить за это говно).
61 1649384
>>648998
в общем скажу так. я смог открыть ее и могу например визуализировать таблицы, но при попытке выполнить любой тест запрос (селект какой-нибудь например) получая ошибку в ебало
62 1649507
>>649178
Не слушай того неосилятора, у оракла есть все, что есть в ANSI.
PL/SQL developer тебе будет лучше, как новичку, но нужно будет настраивать клиент, в инете инфы полно.
Насколько быстрый и глубокий вкат ты хочешь? Можешь гуглить transact top oracle, а можешь посмотреть часов 45 лекций Игоря Мирончика, выбор за тобой.
63 1650619
Какая структура БД у имиджборды?
64 1650625
>>650619
bordy - tready - posty - anonimnyje_usery
65 1650628
>>650625
А как ID у постов и тредов на разных досках автоинкрементируются обособленно друг от друга?
66 1650634
>>650628
Скорее всего, настоящий ID мы не видим, и он, да, уникальный. Но кроме него есть ID борды и номер сообщения, уникальный в разрезе одной борды и инкрементящийся каким-нибудь триггером, типа
post_nomer := select max(post_nomer) + 1 from posty where borda_id = :borda_id;
67 1650678
>>650634
Это получается на каждый новый пост вся таблица с постами просматривается и ищется самый большой номер поста, не жирная операция на практике?
68 1650688
>>650678
Если создать индексы, максимум будет искаться за O(1).
69 1650721
>>650688

> O(log(n))


fix
70 1650752
>>650721
Да уж.
Вам мама о сиквенсах не рассказывала в детстве?
71 1650795
Как в монго правильно хранить мультиязыковые данные?
72 1650834
Где почитать о нормализации БД? Статьи, на которые натыкаюсь содержат овердохуя инфы об этих нормальных формах, приправленной линалом и матаном
Где сказано о практическом применении нормализации?
73 1650872
>>650834
Берешь без задней мысли смотришь все видосы подряд пока не поймешь так с любым материалом
74 1650927
>>650752
По сиквенсу на каждую борду, да? Ок.
75 1650986
>>650927
Любое хранилище с несколькими тысячами справочников и сиквенсами на каждый сейчас в голос проорали.
Ты серьезно? Ты думаешь, что на каждую из, пускай, сотни, досок сделать сиквенс - это затратно?
76 1651019
>>650986
Можно и по таблице тогда создавать.
77 1651025
>>651019
А ты сообразительный.
78 1651059
>>651025
Какой я молодец.
79 1651404
>>650834
Введение в системы баз данных К. Дж. Дейт
80 1651858
>>638710 (OP)
Как прокачать знания в базах данных? Все эти уровни изоляции транзакций, написание сложных SQL запросов, тюнинг SQL запросов, индексы и как их правильно создавать, администрирование и тюнинг СУБД.
81 1652440
>>651858
Ты не поверишь - решать задачки.
Делаешь стенд и хуяришь, потом устраиваешься на работу и там хуяришь.
82 1652450
>>652440
Хватит какого-нибудь постгреса запущенного в докере и документации к нему?
83 1652474
>>652450
Ну задачки таки лучше нарыть отдельно.
84 1653348
>>652450
Вполне себе достаточно должно быть

Почти для всех вопросов "что почитать по базам данных, индексам и т.д." есть один универсальный ответ - книга Томас Кайт "Oracle для профессионалов".
Качаешь, читаешь те главы, которые тебе нужны/кажутся интересными. При необходимости возвращаешься и перечитываешь/смотришь видосы на тытрубе.

Сразу ответ на вопрос "но книга же по ораклу, а у меня postgresql/mysql/mssqlserver" - у всех самых популярных бд почти идентичный набор функционала. Знание того же оракла дает понимание, что можно сделать в любой другой субд, детали нагуглить не проблема.

Кстати, oracle для docker тоже есть.
Адекватные и релевантные знания по администрированию/тюнингу/уровням изоляции и возникающим с ними проблемам приобретаются только опытным путём в работе. Но теория всегда не помешает.
85 1653863
Правильно ли я понимаю, что OUTER JOIN'ы вернут то, что вернул бы INNER JOIN, плюс (возможно) строки с NULL'ами?

То есть что нельзя пропустить нормальную здоровую строчку без NULL'ов, используя INNER JOIN?
86 1653872
>>653863
Ты outer с left перепутал.
87 1653876
>>653872
Под outer' я имел в виду и left, и right, и full.
88 1653880
>>653876
Ну типо да, ты такой джоинишь, джоинишь, а там хуяк NULL

tabl1.pole=1 >>>>>>>>>>> tabl2.pole=1
tabl1.pole=2 >>>>>>>>>>> tabl2.pole=2
.......
tabl1.pole=1 >>>>>>>>>>> tabl2.pole=нет такого....
И тут скуль такой: Эсукабля, чо это такое, пошёл нахуй!
И выкидывает строчку. А если ты ему слева\справа хук ебашишь, то он не выкидывает, говорит , Я ВСЁ ПОНЯЛ и добавляет её в результирующий набор.
89 1654682
Не знаю туда ли зашел. Но проблемы в майрософт access. Создаю таблицы и пытаюсь их связать в "схеме данных". Связываю пункт с типом данных "счетчик" (пик1), он одинаков в нескольких таблицах. Когда связываю пик2, то ошибка пик3 происходит. Пункты эти одинаковы во всех таблицах, с одинаковыми параметрами. Пробовал связывать как до заполнения и любого вмешательства, так и после - результат пик3 всегда.

Хотя есть одно но, если я уберу галки "каскадное обновление связанных полей", и "каскадное удаление связанных полей", оставив только "обеспечение целостности данных", то получается создать связь, но мне те галки нужны. Что делать?
90 1654685
>>654682
Тип данных проверь
не лезь дебил, зачем тебе этот ассес?
изображение.png8 Кб, 512x231
91 1654693
>>654685

> Тип данных проверь


Проверил. Везде как на пикрил. Тип "счетчик", длинное целое, последовательное.

> не лезь дебил, зачем тебе этот ассес?


По учебе надо именно в нем делать
изображение.png13 Кб, 957x399
92 1654694
>>654693
Не влезли нижние параметры на скрине
Screenshot from 2020-04-10 20-29-57.png50 Кб, 1032x270
93 1655039
Аноны, есть вот такие данные, как правильно спросить гугл, или анона, о том, как бы эти данные сгенерировать в то что выше указано?
PSQL, если что.
94 1655043
>>655039
То есть из 4 строк данных, надо сгенерировать одну(и немного переработать), с полным содержанием инфы по юзеру.
95 1655219
>>655043
Не думаю что с этим говном кто-то будет разбиратьса тут. Приходите с вопросом по sql здорового человека.
96 1655319
>>655219
Ну меня больше интересует подход + немного кода(или хоть куда копать).
Неужели такая агрегация - что-то странное и необычное?
97 1655338
>>655319
Да это параша гавно мамонта, там не кода, не инструментов, нихуя нет, какой-то костыль уровня 1с. Попробуй не через меню, а запросом сделать, оно должно понимать sql.
98 1655339
>>655319
А сори анон, я думал это та история с ассес, не рассмотрел скрин
99 1655341
>>655039
Тебе надо развернуть данные?
То есть, например, у него channel есть и Instagram, и Twitter - надо сделать в результате запроса два столбца?
Типа
Id1 Instagram
Id1 Twitter
->
Id1 Instagram Twitter

Pivot или max(case) может тебе помочь.
100 1655342
>>655339
>>655039
Вот как то так, но это tsql, для оракла надо будет поправить.

Немного не ясна задача, предположу что:
-первые две строчки без изменений
-если конвертед 1, иначе 0
-условия для клика
-только инстаграм
-только ифон

SELECT
customer_user_id,
country_code,
iif([event_name]=1,1,0),
CASE
WHEN attributed_touch_type=click THEN 0
WHEN attributed_touch_type=impression THEN 1
ELSE 2
END,
cahnnel,
device_type
FROM dbo.govno
WHERE channel='instagram'
and device_type='Iphone'
101 1655344
>>655342
Там анон выше писал что ты пивот хотел..Или не пивот а строчку собрать..Или просто данные в таком формате? Объяснитесь, сударь!
102 1655652
Как вы запоминаете это? Серьезно. Я учил неделю назад операторы, прорешал задачи (успешно), сегодня открыл - все словно с нуля, позабыл все эти слова и операторы. Вспомнилось, конечно, но без напоминаний - ноль.
103 1655706
>>655652
для закрепления решать задачи нужно, память так работает.
104 1655869
>>655706
Я решал, причем хорошо, но забыл синтаксис. Серьезно.
105 1655870
>>655652
Надо пользоваться на практике. Что не используется - вытесняется из памяти.
2ср.png2,2 Мб, 2048x1940
106 1656273
Что-то половина вопросов в тхреде от студентов, которые получив ответ даже спасибо не скажут, или сьебывают просто запостив свой покак. Предлагаю более не отвечать этим пидорам.
107 1656577
>>655344
Я хотел из 4 строк получить одну строку.
Учитывая что юзеров много и у каждого такой набор параметров о них как на скрине, эти их кучи строк хочу в одну склеить, заменив эти их "триалы/конверты" и прочее на отдельные столбцы с 0(не было такого действия) / 1(было действие).
Как-то так.
>>655341
Скорее свернуть надо, сделав и N строк о юзере одну строку с кучей столбцов.
Спасибо, почитаю про эти штуки.
>>655342
Немного не подходит.

Вот такой код сейчас сделал - https://pastebin.com/nvXKEQzg
В результате пик 1 из пика 2 получается.
Хотя пытаюсть получить строку вида:
"NL04XU2GiATNXRaQSZ3...." | "iPhone 8 Plus" | "CA" | 1 | 1 | 1 | 2 | "female"
108 1656583
>>656577
Из N строку одну с кучей столбцов.
Ну все правильно, тебе надо развернуть таблицу.

select id,
max(decode(param, 'param1', value)) as param1, ...,
max(decode(param, 'paramN', value)) as paramN
from table
group by id

У тебя на каждую строку останется только одно заполненное значение в столбце, а max их схлопнет.

Проблема в том, что много хардкодить надо.
Или заводить справочник, по которому динамически будет строиться запрос.
109 1656589
>>656583

> Проблема в том, что много хардкодить надо


Это да, но набор столбцов не окончательный, сейчас пытаюсь найти какие-то зависимости и выбрать нужные мне данные.
Спасибо, антош, буду пробовать.
110 1656590
Работаю ETL разрабом, 170 тыщ на руки в ДС. 29 лет
Стек - sql server,teradata
Ну и SSIS,Pentaho и прочая залупа
Игогда переписываю или пишу процедуры и прочую хуету

Куда двигаться дальше - хз

Как выбраться из говна, пойти в HADOOP и начать учить Джаву...
111 1656598
>>656583

> max(decode(param, 'param1', value))


Но в PostgreSQL такого нет, а у меня именно он, эхъ.
112 1656601
>>656590
170к в ДСах за написание sql разве не ок?
Какие вопросики на собесе были?
113 1656602
>>656583
Хух, все сделал как надо теперь заебись все работает, спасибо, антош, еще раз.
114 1656622
>>656601
Это слишком тупая работа
и там не чисто SQL
Еще ETL
115 1656623
>>656622
Вопросики:

Написать модуль на t-sql, который позволить сотворять элементарные действия с таблицами

Проверки, тригеры и тд

Набор хранимок/функция/тригеров
116 1656625
>>656623
Но это все просто

Гораздо сложнее решать тупые задачи на sql-ex
из постов 1643937 и 1644035
117 1656640
>>656598
>>656602
Просто decode писать с телефона короче, чем case.

Грац, анонче, рад, что помог.
118 1656855
Антуаны такой вопрос.

Есть таблица вида

Имя | Поле1 | Поле2 | Поле3 | ID

В таблице есть одинаковые строки с разными ИД. Скажем есть ИД 2 и ИД 3, в рамках этих ИД есть одинаковые строки отличающиеся только ИД, так же есть много других строк\ид, которые не повторяются, пересечения только в рамках строк у которых ИД 2 и 3.
Соотвественно мне нужны строки с ИД 2, которых нет в ИД 3. Вроде как просто решается подзапросом, но какой-то топорный метод, нельзя ли что-нибудь поизящней с OUTER JOIN прикрутить?
119 1656861
>>656855
Вот пока так:

SELECT *
FROM dbo.govno
WHERE ID=1
and Имя not in
(SELECT Имя
FROM [хд_в].[Пункт]
WHERE ID=2)
ORDER BY Имя, ID

Опять же пока все наименования уникальны в пределах ИД, но нет гарантии что так же и сотанеться.
120 1656925
>>656855
На

Select t1.*
From tab t1
left join tab t2
On t1.имя+поле+поле2+поле3= t2.имя+поле+поле2+поле3

Where t2.id is null
изображение.png33 Кб, 371x236
121 1657059
>>656925
Ну это тоже говно какое-то. Есть же наверное более изящный способ через intersect какой-нибудь. Смотрим пересечение ИД 2 и 3, а потом выбрасываем их.
В таблице есть уникальное поле с ключем, т.е идентифицировать уникальную запись можно, нужно только найти общие элементы.
122 1657230
>>656855
select
имя,
поле1,
поле2,
поле3
from dbo.govno
group by имя,
поле1,
поле2,
поле3
having count(case when id = 2 then 1 end) > 0
and count(case when id = 3 then 1 end) = 0
123 1657727
>>657230
хм, вот это уже поинтереснее.
Сеньёры, ещё будут варианты?
124 1657736
>>656855
select id2, name, f1, f2, f3 from (
select name, f1, f2, f3 from t where id = id2
minus
select name, f1, f2, f3 from t where id = id3
);
125 1657986
Я ещё раз повторю свой вопрос: как вы это запоминаете? Бывает ли так , что забыли простейший оператор, забыли, какие кавычки пишутся, как вчера решили задачи и т д?
126 1657990
>>657986
пишешь каждый день - и все!

ну хуй знает как это можно забыть...
127 1657997
>>657990
То есть это редкость, недели правило, забыть, что такое except, union и т д при обучении?
128 1657998
>>657997
Нежели
129 1658148
>>657997
Вообще ты не учел главного.
Sql планировался как язык для домохозяек менеджеров, потому почти все его конструкции очень логично звучат и так же логично переводятся на родной тебе язык. Это касается как и принципа работы, так и принципа вызова/написания этих конструкций.

Ты же не используешь каждый день все слова из своего лексикона, но когда встречаешь - понимаешь, что знаешь это слово.
130 1658221
>>658148
Ага, особенно логично и просто всякие WITH OVER PARTITION.
131 1658236
>>658221
хехехех
132 1658635
>>658221
А что не так?
Ну серьезно.
With - с. Такой таблицы нет, теперь будто бы с ней в схеме.
Over - над. Если бы ты смотрел аналитические функции плотнее, то вместе с partition(сиречь, группировкой, частью) и range/rows beetween все очень просто и интуитивно понятно - операция над диапазоном.
Partition - та же часть - в контексте деления таблиц тоже очень простая формулировка.
133 1659205
Как из таблички на 2 поля amount (float), inserted (datetime) вытащить сумму amount за период от/до, но не простой, а разбитый на N частей?

Юзкейс - интерфейс дающий возможность посмотреть amount за произвольный период с произвольной разбивкой. Основные варики: каждый месяц в году, каждую неделю в году, каждый день в месяце, каждый день в неделе, каждый день в две недели, каждые 12 часов в неделе, каждый час в день, каждые два часа в день и т.д.
image.png121 Кб, 211x239
134 1659553
Привет всем.
У меня есть некий рест, который должен отдавать только изменения в базе данных по запросу пользователя. Что то вроде long pooling или вебхуков.
Мне кажется что я делаю велосипеды, когда навешиваю на бд триггеры или каждую минуту отправляю селекты.
Для этого существует ORM или это как-то по-другому проще можно сделать? Типа контроля версий бд?
135 1659682
>>659553
Эм, ну пользователь спрашивает отдаешь ему все данные старше 5 часов например, и обновляешь переменную, чтоб в следующем запросе показало только то что обновилось с прошлого.
136 1659683
>>659205
Я хз, но звучит как дохуя кода. Сначало тянем общие данные за период, а потом в зависимости от потребности режем их. Соответсвенно на каждую фракцию своя обработка, процедура на вход принимает период и фракцию, отдает результат.
137 1659701
>>659553
А как эти данные меняются? Что мешает тебе при изменении данных, на уровне DAL создавать копию тех, что ты отдаешь пользователю и при запросе использовать её?
138 1659857
>>659205
Что пришло в голову,

Пользователь указывает год, месяц или неделю
или то и то

в sql servere есть функции, которые возвращают:
месяц
номер недели

Как это будет выглядить?

В почем понимании пользователь хочет посмотреть данные за 2020 и 33 неделю

where year(datetime)=2020 and wk(datetime)=33

Вот тебе и нужный результат
Но у тебя будет несколько кейсов поведений пользователя, тебе придется писать запрос на каждый кейс
139 1659864
>>659857
Хуйню я пишу невнятную с утра пораньше

каждый месяц в году,
select day(твоядата),sum(твоеполе)
from t
where year(твоядата)=&Значение пользвателя
group by day(твоядата)

каждую неделю в году
select wk(твоядата),sum(твоеполе)
from t
where year(твоядата)=&Значение пользвателя
group by wk(твоядата)

каждый день в месяце
select day(твоядата),sum(твоеполе)
from t
where year(твоядата)=&Значение пользвателя and mounth(твоядата)=&Значение пользвателя
group by day(твоядата)

Продолжать не буду
140 1659866
>>659205
Давненько сикуль не трогал, но что мешает написать что-то наподобии
SELECT
bucket(inserted),
SUM(amount)
FROM mytable
GROUP BY bucket(inserted);
где bucket - функция конвертирующая дату в некоторое значение для последующей группировки (для годов - получение года из даты)?
141 1659870
>>659553
В запрос передаешь дату последнего запроса и отдаешь всё что после неё. Вопрос лишь в том, кто хранит эту дату - сервер или сам клиент?
142 1660344
>>659682
>>1659555 →
Я хуево обьяснил , что мне надо наверное
например, я удаляю из таблицы запись с primary key = 5, мне бин, который слушает бд отправляет post запрос с Json {table: tablename, primary key: 5, status: deleted}
Или добавляю новую запись, мне «бин» шлёт Json {table: tablename, primary key: 5, status: added}
Или меняю запись, мне «бин» шлёт Json {table: tablename, primary key: 5, column_changed: new_value, status: changed}
Что-то типа того, только не опрашивать бд каждую %period_time, а чтобы непрерывный мониторинг был и не нагружать бд кучей запросов. И не писать велосипедов самому.
143 1660642
>>660344
Звучит так будуто тебе нужно читать лог. Тоже самое что писали выше, но параллельным запросом к жрналу с таблице с логом. Хз может из журнала транзакций это тянуть, не щнаю какая там структура .
144 1661876
>>660344
Это прямо то, для чего создавалась Kafka. Просто пишешь в неё нужные действия при изменении БД, а клиентами вычитываешь их.
Есть готовые коннекторы к БД (для postgres, например), которые как раз занимаются тем, что пишут из коммит лога в кафку.
145 1662067
Интересно, есть ли такая база данных.

Нужна условная streaming аналитика.
База данных должна держать определенное окно данных (FIFO).
И иметь продвинутое апи, позволяющее хитрые выборки с встроенными статическими функциями.

Кроме spark.
146 1662615
>>659553
У оракла для мониторинга изменений прямо в базе есть FGA.
147 1662887
Аноны как забирать данные с веб?
148 1662952
>>660344
Если производительность не критична, и объектов мониторинга немного, то триггеры вполне рабочий вариант, до появления логической репликации часто так и осуществляли мониторинг изменений.
Иначе следует смотреть в сторону репликации-чтения логов транзакций, если требуются именно измененные данные, как написали выше. Если достаточно запроса направленного в базу, то можно попробовать подцепиться к логам базы.
Но последние два варианта скорее всего не будут простыми, так как репликация в большей степени нацелена на запись в стэндбай. Полученные данные от потока репликации вероятно придется самому парсить, и отслеживать прогресс чтения логов, так как не все базы отдают информацию транзакционного лога в user-friendly формате
149 1664223
Такая задача. Краулятся несколько сайтов периодически, записи в базе типа site,url,type,scrape_date.
Надо генерировать статистику на каждую дату - сколько для каждого сайта было записей каждого типа + разницу с прошлой датой. Сколько каждого типа добавилось, сколько уменьшилось.
Вот это последнее надо как-то эффективно реализовать.
Я наколхозил такое и оно работает, но медленно, и с ростом количества записей всё медленнее. Каждый раз добавляется в районе 50к записей.
https://pastebin.com/2wHX7ATd
150 1664249
>>664223
в СУБД только два способа решения проблем:
1. навешивание дополнительных индексов
2. предвычисления

используй п.2. не используй group by,но вычисляй эти самые факты и храни в отдельной таблице.
151 1664265
>>664249
Был такой вариант, но может есть попижже быстро вычисляемое решение.
152 1664288
>>664265
чтобы вычислить результат группирующей функции, нужно вычислять результат группирующей функции!
блядь. куда еще быстрее?

разумеется, ты можешь попытаться оптимизировать группировку индексами, но суть от этого не меняется.
поэтому, если данных действительно будет много, лучше сразу заняться предвычислениями при обновлениях.
153 1664856
>>664223
Индекс на (site, scrape_date) есть?

>t2.id IS NULL


Это ещё откуда взялось и зачем нужно? Пишешь нам одно, а делаешь другое - так проблему сложно будет решить.
154 1664877
>>664856
Индексы есть, да.

> Это ещё откуда взялось и зачем нужно? Пишешь нам одно, а делаешь другое - так проблему сложно будет решить.


То же самое. Идея такая - два подзапроса за разные даты джойнятся между собой по урлу и выбираются только те, где нет соответствия.
Т.е. если такой запрос сделать на date1,date2, то будут только исчезнувшие, а если date2 date1, то только новые.
155 1666210
>>664223
Что за база? План запроса есть? Железо какое?
Не пробовал аггрегацию по всей таблице в разбивке по дням делать?
Попробуй партиционирование по дате добавить !вместо индекса.
156 1667268
>>648003
В 95% запросов, говорю тебе со стороны дата анализа, тебя даже на собес не пригласят если джоинов и юнионов не знаешь.
157 1667272
>>645362
Задавай вопросы что интересно. Я тоже с гуманитарным высшим, таких перекатившихся куча, ни разу за 6 лет никто даже не пошутил об образовании и должности.
158 1667379
>>667272
Интересуются ли прошлым опытом?
Есть ли возможность карьеры при усердии и трудолюбии?
Коллектив какой? Не бывает ли конфликтов? Дружелюбные ли?
Как проходит собеседование? Тяжело ли было?
159 1667453
>>667379

>Интересуются ли прошлым опытом?


А о чём спрашивать если ты перекатываешься, лол. Разве что, если будут какие-то интересные моменты в твоём прошлом опыте(матан, языки) - то спросят. Запомни, когда джуна спрашивают о чём-то на собесе то это 100% чтобы прощупать теор.базу, а не чтобы завалить. Сам собеседовал 2х джунов.

>Есть ли возможность карьеры при усердии и трудолюбии?


Карьера в классическом понимании в IT отсутствует, здесь всё просто, если ты справляешься с задачами определённой сложности - ты растешь и похуй что ты всего пол года работаешь. Даже если прошло 3 года, а ты всё еще джун, значит ты тупой ты на своем месте.

>Коллектив какой? Не бывает ли конфликтов? Дружелюбные ли?


По деффолту, все очень дружелюбные, трудно быть быдлотой и кодить одновременно. Конфликты могут быть только по рабочим вопросам и то они больше смех вызывают.

>Как проходит собеседование? Тяжело ли было?


Первое - очень волновался, последующие на раслабоне. От тебя не требуется внимательности, просто будь собой, твои знание сами всё сделают если они есть.
160 1667515
>>667453
Спасибо. Ты довольно сильно обнадежил меня и успокоил.
А ты с чем вкатывался? Изучал самостоятельно?
161 1667561
>>667515
Решил вкатываться в дата аналитику, когда это даже не было мейнстримом. Итого, сам дома выучил запросики SQL, внезапно ексель, и буквально немножечко питона, на уровне первых 10 уроковэто было очень важно, чтобы дать понять что хочу развиваться. На собесе спросили меня:
1. Обьяснить что такое join в sql и зачем он
2. формулу ВПР из екселя
3. Понимаю ли я что делает продукт компании. Да этот вопрос будут задавать часто, чтобы понять насколько ты адекват.
Считай вкатывался я с 0. Мат образования - не было.
Самостоятельно изучал, какие-то рандомные курсы sql и обязательно задачи на сайте sql-ex. Послушал курс по Data science на курсере. Звонил бывшей коллеге в моб.оператор, она стала нач.отдела уже, говорит что нету джунов с хорошим знанием SQL. Уже полгода не могут найти. Я в геймдеве - у нас так-же, искали джуна, приходит куча народу но с SQL мало. Кароч в первую очередь учи запросики и дерзай.
162 1667593
>>667561
Зачем нужна реляционная модель? Для ускорения?
163 1667679
>>667561
А в каком возрасте ты вкатился?
164 1667723
>>667679
В 25, до этого дома сидел на двачах и игры ганял.
>>667593
Лол, как минимум чтобы была связь в данных. Типа чтобы таблицы "покупатели" и "магазины" небыли просто отдельно стоящими таблицами и между ними была логическая связьай_ди покупателя.
165 1667783
>>667723
А что почитать посоветуешь?
166 1668119
>>667783
Даже не знаю что посоветовать, я хуевый советчик в этом плане, проходил курсы и читал стак. И ты тоже так делай.
167 1668360
>>667561
А какая твоя первая специальность?
168 1668515
>>668360
По сути - у меня не было никакой специальности когда я вкатывался.
Меня засунули учиться на финансиста, но я и дня ним не проработал. И не смог бы. После выпуска 4 года откисал дома, родители выпирали работать, пошел устраиваться дата аналитиком, начитался много о этом. До этого прошел кучу курсов дома. Не прошел 2 собеса. Подтянул то на чём сыпался, и смог пролезть аналитиком в FMCG. Очень заебывали на собесах вопросом что я делал 4 года после выпуска- отвечал, что фрилансил. Это отчасти правда, но фрилансил не по аналитике.
169 1668566
>>668515
Ты выпустился в 21?
170 1668571
>>668515
Ну финансист - это жк не гуманитарная специальность
171 1668610
>>668571
Как сказать, тех ключевых областей чтобы комфортно чувствовать себя в айти и развиваться - на должном уровне или вообще, в курсе не было. Да может были какие-то интересные моменты по эконометрике но не более. Да и вуз далеко не топовый был.

>>668566
Никогда не помнил этого. Да и сейчас не вспомню. Стараюсь забыть тот период. Когда вношу куда-то инфу о годе окончания вуза, бомблю +\- 2 года.
172 1668641
>>667561
А сколько ты на старте получал в долларах?
173 1669245
Привет, базаны.
Не знаю, может это чисто у меня такое, но заметил такую вещь, что в большинстве случаев работа с sql это тоска смертная. Какие-то смердящие данные, лежащие в тысячах таблиц, которые создал прошлый творец, благодаря которому всё это надо джойнить и тащить. Круг задач на sql крайне узкий, при этом приходится сидеть и пердолиться с хранимыми процедурами на этом весьма посредственном синтаксисе.
Куда бы я не копнул, в какую бы сторону не попытался смотреть, где есть большое присутствие SQL - везде тоска смертная. Тот же Power BI и прочие иже с ним производят впечталение какого-то переоценнённого говна вроде О СМОТРИ ТЕПЕРЬ ТУТ МОЖНО ДЕЛАТЬ ТАКИЕ ЖЕ НЕСКУЧНЫЕ ГРАФИКИ КАК В ACCESS/EXCEL В 2007 ГОДУ!

Как вы находите себе интересные задачи там? Идёте в банк и становитесь аналитиками? Или по кайфу пишете запросы, достаёте данные бэкендерам/фронтам и отдаёте их, заваривая очередной чай? Пришёл на проект, где всё очень сильно завязано на sql, с тысячей таблиц, масса из которых будто бы делалась наспех и чтобы быстрее работала. И просто тоска смертная, сидит тимлид, во всём этом разобравшийся и агитирует вникнуть и разобраться других, чтобы и дальше плодить в этом монстре триггеры и хранимые процедуры сидя на сервере 10 версии.
174 1669868
>>669245
Фсмысли, узкий круг? а само число таблиц разве не показывает, что число видов сущностней записанных в этой базе широкое?

Потом, наверное твой текущий проект денег приносит нихуево.

Если так скучно, поди напиши мобильный клеент к нему. Это многим нужно, но они (справедливо) считают что это слишком дорого
175 1669878
>>667593
Как обычно, в it уже про это забыли, но да, для ускорения. Базовая задача - ускорение.

Обновить данные в одном файле, не затронув гору других.
Хранить данные компактно связывая их по идентификаторам int, но тащить везде одинаковые и длинные строковые поля.
176 1669935
Привет, аноны.

Решаю задачи обучающего раздела с sql-ex на PGSQL. Иногда решение не работает на PGSQL, но аналогичное работает на другой СУБД. Хотелось бы, чтобы их кто-нибудь объяснил.

Следующее решение задачи 101 проходит на MySQL, но даёт неверный результат на проверочной базе в PGSQL.

> select


> code, model, color, type, price,


> max(model) over w,


> max(case type when 'Jet' then 1 else 0 end) over w


> + max(case type when 'Matrix' then 1 else 0 end) over w


> + max(case type when 'Laser' then 1 else 0 end) over w as distinct_types,


> avg(price) over w


> from (


> select


> printer.*,


> (sum(case when color = 'n' then 1 else 0 end) over (order by code)) as group_no


> from


> printer


> ) grouped_printers


> window w as (partition by group_no)

177 1669937
То же самое с задачей 117

PGSQL (не проходит):
select distinct
country, value, attr
from (
select
country, attr, value,
rank() over (partition by country order by value desc) as rank
from
classes
join lateral
(values ('numguns', numguns 5000), ('bore', bore 3000), ('displacement', displacement)) attrs(attr, value)
on true
) q
where rank = 1

MSSQL (проходит, join lateral заменен на cross apply):
select distinct
country, value, attr
from (
select
country, attr, value,
rank() over (partition by country order by value desc) as rank
from
classes
cross apply
(values ('numguns', numguns 5000), ('bore', bore 3000), ('displacement', displacement)) attrs(attr, value)
) q
where rank = 1
177 1669937
То же самое с задачей 117

PGSQL (не проходит):
select distinct
country, value, attr
from (
select
country, attr, value,
rank() over (partition by country order by value desc) as rank
from
classes
join lateral
(values ('numguns', numguns 5000), ('bore', bore 3000), ('displacement', displacement)) attrs(attr, value)
on true
) q
where rank = 1

MSSQL (проходит, join lateral заменен на cross apply):
select distinct
country, value, attr
from (
select
country, attr, value,
rank() over (partition by country order by value desc) as rank
from
classes
cross apply
(values ('numguns', numguns 5000), ('bore', bore 3000), ('displacement', displacement)) attrs(attr, value)
) q
where rank = 1
178 1669963
>>669868

>а само число таблиц разве не показывает, что число видов сущностней записанных в этой базе широкое?


Ну да. А что толку? Можно нескучно джойнить благодаря фантазиям архитектора, когда отчёт собирается из нескольких баз данных и это типа я эскуель девелопер?

>Потом, наверное твой текущий проект денег приносит нихуево.


Ну, скажем так, он просто не сможет жить. Но даже программисты там часть звена, и даже не центровая, по сути. Просто руководство не захотело один раз потратиться на готовое решение, поэтому начали городить велосипеды, в итоге это всё превратилось в пранк, вышедший из под контроля.

>Если так скучно, поди напиши мобильный клеент к нему. Это многим нужно, но они (справедливо) считают что это слишком дорого


Есть уже. Околобесполезная вещь оказалась. Потому что специфика бизнеса такая, что никому не нужно.
179 1671094
>>668641
Первая зп - 600$ кажется, отдел отчётности, Киев, 2014\2015 год, но там просто череда везений была после с повышением и внезапным переходом в другой отдел. Так-что даже не буду описываить.
15621001471070.png640 Кб, 604x604
180 1685978
Смотрите какую йобу я придумал.
Вот есть JSON. Можно представить что это либо строка, либо число, либо массив, либо объект (условно).
А теперь берём это определение и создаем под него нормализованную схему БД - то есть по отдельной таблице для каждого типа (строка/число/массив/объект) и таблица которая маппит конкретное значение в конкретный тип.
Это что получается, я изобрел монгу поверх реляционки?
181 1685994
>>685978
На самом деле, в том или ином масштабе можно изобрести что угодно поверх чего угодно. Реляционная поверх key-value. Древовидная поверх реляционной. Key-value поверх таблицы из одной строки с полем TEXT. Было бы где хранить байтики и чем их обрабатывать. Жёсткий диск же как-то всё хранит в одном линейном массиве.
183 1695786
Поясните за изоляцию транзакций.
Аномалии могут наблюдаться только при наличии > 1 запроса в транзакции, или с 1 запросом тоже может быть (например когда вложенный select или join)?
184 1695825
>>695786
Только при наличии > 1 запроса.
15891943925380.jpg280 Кб, 1024x1371
185 1695827
>>695825
Заебись тогда. Спасибо!
186 1695868

>Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование


Крч есть книги, есть категории. Связь many-to-many
books, categorys, books_categorys
Вывести пары книга-книга у которых более 5 общих категорий
187 1695883
>>695868
SELECT bc1.book_id, bc2.book_id
FROM books_categories bc1, books_categories bc2
WHERE
bc1.category_id = bc2.category_id
AND bc1.book_id != bc2.book_id
GROUP BY bc1.category_id
HAVING COUNT(bc1.book_id) > 5;

Найти сначала все пары с хотя бы одной общей категорией (одинаковая категория, разные книги), затем сгруппировать по id первой книги и проверить, что записей в группе больше 5.
188 1695884
>>695883

> GROUP BY bc1.book_id


fix
15423842878900.jpg43 Кб, 570x587
Горит жепа 189 1696768
есть строка формата datetime и мне нужно ещё достать в пхп и вставить в строку, когда я это делаю получается что вставлена пустая строка, а как достать значения даты я не понимаю мне 12 лет я додик подскажите как с этим работать
190 1696776
>>696768
Спроси в php-треде, и сразу приложи ссылку на pastebin с твоим кодом
192 1698197
Наверное оче часто задаваемый вопрос, но все же, по SQL вроде много курсов там всяких, видео, но с чего лучше всего начать из этого С НУЛЯ когда, реально глаза разбегаются и не поймешь что годно что нет, где будет одно и то же другими словами... Есть какие-то одобренные аноном хорошие бесплатные курсы?
193 1698228
>>698197
Упражнения на sql-ex.ru
194 1698231
>>698228
Как только научишься писать там SELECT'ы разной сложности, рекомендую для изучения теории курс на Stepik, там будут рассмотрены вопросы проектирование схемы, нормальные формы, и мб даже транзакции.
195 1698245
>>698228
>>698231
Спасибо, на степике видел курсы, который от вышки норм? Еще разные смотрю, их так-то полно но хз какие стоят прохождения. И еще, а книги типа Грабера и других из того же гайда вон стоит читать?
196 1698252
>>698245
Да, норм, я эти курсы и имел в виду.
Для начала сойдут.
Что изучать после этого - пусть подскажут другие аноны. Да и это зависит от того, куда ты хочешь пойти (DBA или разработка приложений).
197 1698256
>>698252
Аналитик, у меня вышка с экономикой/финансами вообще связана, сейчас смотрю в вакансиях много где надо с базами уметь обращаться.
198 1698262
>>698256
Мне кажется, что для аналитика достаточно умения выполнять хитроумные SELECT'ы со всякими агрегированиями, window-функциями, рекурсивными CTE и pivot (это как раз то, чему учит весь sql-ex) , а пректирование схем их не очень касается.
Но пусть лучше тебе аноны-аналитики подскажут.
199 1698263
>>698262
Если я просто девелопер без знания SQL, который пишет только OLTP, мне нужно учить все эти пивоты и рекурсии? Или во всякой вебне, которую я буду писать, в основном все попроще?
другой анон
200 1698268
>>698263
Плюсану к этому вопросу.
Сам я от нечего делать нарешал 350+ задач на sql-ex, но хотелось бы знать, насколько всё это нужно обычному бэкенд-разрабу.
201 1698271
>>698268
Вообще, я общался на эту тему с одним php-разрабом, он сказал, что у них всё через ORM. А значит, никаких advanced-фич.
Но один случай ничего не значит.
202 1698281
>>698263
Глубоко задрачивать что-то дальше джоинов смысла мало. Обычно если реально что-то понадобилось, это легко гуглится и сразу же изучается.
203 1698331
>>656590
Анон, двигай в сторону data science или в кровавый интырпрайз. Выбери что нравится: на очередном собрании с заказчиками пиздеть, что данные были сырыми и всё проёбано, или что индусы опять нахуярили ебанины, и ваш отдел качества опять проебал все сроки. Но уже за 200-300 тыщ в секунду.
204 1698555
>>638710 (OP)
Посоветуйте книгу по темам event/domain driven systems
205 1699226
>>698555
Бамп
206 1699268
>>638712

>выбрать литературу для вкатывания в sql


Моисеенко
208 1699524
Посоветуйте книгу/туториал по postgresql. С sql в общих чертах знаком.
209 1699538
>>699524
Тебе сюда >>1668733 (OP)
210 1699541
>>699538
Ты выставляешь меня в невыгодном свете.
211 1699635
212 1699855
>>642509
В чем сделана схема на скрине?
Искал средство визуального построение схем БД, и чтото не нашлось годного. Есть красивый https://www.dbdesigner.net но он платный. Что посоветуете?
213 1699985

>SQL is one of the world's most fantastically moronic language. It is a language of ad-hoc-ness; the least structured; a oneliner sequence of awkwardness and inflexibility.

214 1700001
>>699985
Чёт больше ничего не взлетело, а за овер 30 лет могло бы. Даже ORM подражают SQL.
215 1700242
>>700001
Да это я набросил просто.
216 1700289
>>699524
Официальная документация.
Серьёзно, она вполне читаемая.
217 1700322
>>700289
Уже читаю, спасибо.
image.png5 Кб, 472x136
218 1700589
>>638710 (OP)
Redis и Postgres работают через сокеты, мне вот интересно: их обычно ставят на том же серваке или относят на другой удаленный серв? Просто хуячить дополнительный HTTP-request к стороннему ресурсу это пиздец в плане быстродействия
Так кто-то делает?
219 1700594
>>700589
При чём тут HTTP? К удалённому серву тоже обращаются через сокеты без HTTP.
220 1700595
>>700589
Ты забываешь use case когда есть несколько инстансов приложения и общая БД
221 1700600
>>700595
>>700594
Есть у меня 2 проекта: бот для телеги и веб-кроулер (пока тестировал их только на своей машине в localhost). В обоих юзается Postgres а в одном еще и Redis (для очередей). Мне же нет никакого смысла для таких небольших проджектов хуярить БД на отдельном ресурсе? Лучше на тот же сервак залить?
222 1700601
>>700600

> Лучше на тот же сервак залить?


Конечно лучше. Пока у тебя нет проблем масштабирования так и надо делать
223 1701365
Что делать с перечисляемым атрибутом, по-кторому часто может быть поиск, но вариантов этого атрибута - не много, перед вставкой он проверяется, но возможно варианты атрибута поменяются в будущем? Например sex/gender (я быдло и разницы не понимаю, если что): надо делать отдельную сущность gender или enum подойдет?
Вообще у меня курсач "агенство по трудоустройству", я хз что делать с типом занятости, типом зарплаты и т.д. - ебнуть их в enum или в другую таблицу? Если в другую таблицу - джоинов много, при этом данных не много, к тому же они явно будут индексированы. Да и enum в реляционной алгебре - явно просто еще одно отношение...
Че делать то?
224 1701415
>>700589
обычно на отдельной единице исполнения. И что? Надо мерять важно это или нет.

Хорошо бы, чтобы http были не серийные, последовательного ожидающие ожидающие ответов,а логически-законченные запросы к какому-то "мидлваре" , application server И тд.

В принципе и с sql та же проблема.
Многие программисты ужасно удивлялись, когда их приложение на дельфи перенесенное из локалочки в интернет, начинало тормозить.

Противоположный конец - встраиваемые в программу субд: sqllite, berkleydb, библиотека innodb, embeded mysql (впрочем, его похоронили) .
Там действительно все не так как привыкли, нулевые накладные расходы на обмен.
225 1701506
>>701365
enum подойдёт
Чтобы быстро работал поиск, делай индекс по нему.
В твоём случае отдельная таблица никакого выигрыша не даёт, да и непонятно, какие атрибуты тебе нужны в таблице полов, кроме названия.
Screenshot8.png142 Кб, 1706x993
226 1701603
Кто может объяснить, какому пользователю я должен дать права? Застрял с дипломкой
Пиздец дедлайн скоро уже
227 1701693
Я оказывается не в старом треде вопрос задал, спрошу еще тут

Есть кто работал с SQLite?
У меня в таблицах первичным ключом будет поле с GUID вместо числового с автоинкриментом.
Подскажите, как лучше таблицы создать с опцией WITHOUT ROWID или без нее в этой ситуации?
Это опция позволяет делать поле, которое является первичным ключом, кластерным индексом.
Без этой опции у каждой таблицы создается числовое поле ROWID которое и будет счиаться кластерным индексоа.

Так вот
Как у них в документации написано
https://www.sqlite.org/withoutrowid.html
Что стоит использовать WITHOUT ROWID когда ключевое поле не числовое и когда строки не занимают очень много места.
Также эта опция уменьшает ускоряяет поиск и уменьшает место занимаемое строкой за счет того что нету поля ROWID.

Но говорят что использование гуида в качестве кластерного индекса повышает фрагментацию на диске и что база разбухает быстро от этого
Правда это статься про MS SQL Server, не знаю насколько это применимо к SQLite
https://www.sqlskills.com/blogs/kimberly/guids-as-primary-keys-andor-the-clustering-key/
228 1703170
PROCEDURE "DELETE_LEAST_PROFITABLE_BALANCE" IS
BALANCE_ID_ NUMBER;
BEGIN
SELECT ID INTO BALANCE_ID_ FROM BALANCE ORDER BY AMOUNT LIMIT 1;
DELETE FROM OPERATIIONS WHERE BALANCE_ID = BALANCE_ID_;
DELETE FROM BALANCE ORDER BY AMOUNT LIMIT 1;
END;

Нужно удалить запись с первичным ключом из Balance и все вторичные ключи этой записи из Operations. Видит ошибку в этой записи, ругается на Statement Ignored и неверное завершение sql предложения.
229 1703199
>>703170

> DELETE FROM BALANCE ORDER BY AMOUNT LIMIT 1;


delete from balance where amount = (select amount from balance order by amount limit 1);

Ну тли min()/max()
230 1703216
>>703199
А так не сработает?

> delete from balance order by amount limit 1

231 1703224
>>703216
работает. в mysql, лол.
чувствуешь подвох?
232 1703233
>>703199
>>703216
Да, но мне же еще нужно сохранить ID для удаления записей с ним в другой таблице, это ключ без ON DELETE CASCADE. Ну да, ладно, сработало вот так:
PROCEDURE "DELETE_LEAST_PROFITABLE_BALANCE" IS
BALANCE_ID_ NUMBER;
BEGIN
SELECT ID INTO BALANCE_ID_ FROM BALANCE WHERE AMOUNT = (SELECT MIN(AMOUNT) FROM BALANCE);
DELETE FROM OPERATIONS WHERE BALANCE_ID = BALANCE_ID_;
DELETE FROM BALANCE WHERE ID = BALANCE_ID_;
END;

с ORDER BY и LIMIT он упорно не хотел работать.
233 1703239
>>703224
Ебать странный синтаксис.
Я думал, что не столкнусь ни с чем страннее insert into ... select
234 1703370
EXCEPT не работает, если вторая выборка вообще ничего не возвращает?
235 1703378
>>703370
Возврат пустой выборки - не ошибка, и исключения не будет.
То же самое с delete и update, если записи не найдены.
image.png183 Кб, 749x665
236 1703768
>>638710 (OP)
Блин, где объясняется чтение подобных таблиц для СУБД? Куча стрелочек, причем какие-то с треугольником и кружком на конце, а какие-то с кружком и линией
237 1703797
>>703768
htps://ru.wikipedia.org/wiki/ER-модель
239 1704100
>>703370
Нет, просто в Oracle EXCEPT называется MINUS.
https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm
240 1704392
>>648362
Тебе нужна предпоследняя точка в строке, не нужно проверять число вхождений
241 1704606
Есть запрос:
Select поле1, поле2... фром... агрегатные функции...where...
И есть условие:
Where поле1 in (массив_значений)
Мне нужно чтобы результат был сгруппировано (group by, ага) по этому условию.
Т.е. две строки получалось, с одними и теми же столбцами, но в одной поле1 удовлетворяет условию, в другой нет.
Конечно, можно сделать 2 запроса, но ведь как-то можно сделать и одним?
242 1704650
>>704606
Не понял твоего вопроса, но возможно тебе поможет HAVING.
243 1704656
>>704606
Прочитал ещё раз вопрос и вроде понял.
Делай
GROUP BY CASE WHEN поле1 IN (...) THEN 1 ELSE 0 END
244 1704777
>>704656
Group by 1 || 0??
245 1704787
>>704656
Я не понимаю - что значит сгруппировано по этому условию?
Может быть
SELECT (CASE WHEN field1 IN [] THEN 1 ELSE 0 END) AS conditon
GROUP BY field1?
246 1704821
>>704787
Или можно больше данных по запросу?
247 1704832
>>704606

>Where поле1 in (массив_значений)


> в одной поле1 удовлетворяет условию, в другой нет.


Выбери что-то одно. Тебе нужна не фильтрация (where), а флаг показывающий состояние по этому условию
248 1704842
>>698263
Ну рекурсии могут пригодится не только для аналитики (иерархия комментов с пагинацией, например), но к целом дрочить много не надо, надо знать минимум и идти дальше и от задач строить своё обучение
249 1704861
MSSQL
Такое дело: есть две таблицы. Одна таблица — сколько вошло, вторая — сколько вышло. Мне нужно как-то придумать, чтобы сопоставить вторую таблицу с первой по принципу FIFO. Например так:
table_in
ID, AMOUNT
1,3
2,3
table_out
ID,AMOUNT
1,2
2,2
3,1
А на выходе должно получиться
IN_ID,OUT_ID,AMOUNT
1,1,2
1,2,1
2,2,1
2,3,1
250 1704906
>>704650
>>704777
>>704787
>>704821
>>704832
Спасибо за ответы. Коллега помогла с решением.
With (массив значений) as table
select поле1 in table as условие, поле2... фром... where...
group by условие.
И получается, то, что я хотел, за один запрос.
Не знал, что можно делать CTE из массива значений, и то, что через IN и Group by вот так можно делить, я точно бы никогда не догадался.
Надо было больше задачек решать на sqlex, эх. Чувствую себя тупым.
251 1704915
>>704906
Хотя CTE тут и не обязателен. Можно просто
select поле1 in (массив значений)
252 1706485
Что прочитать по Postgresql?
Много лет его использую, но недавно меня уж очень больно опустили по поводу уровней сериализации транзакций, фантомных чтений wala и прочей хрени.
К тому, же, я видимо пропустил много крутых фич, вроде skip locked.
Что читать/смотреть по этим двум направлениям?
253 1706652
Как вкатиться в OLAP-кубы?
254 1706723
>>704861
Бамп
255 1707483
Двач, помоги бездарю расшифровать простейший запрос
SELECT name, age
FROM "/users/alan/folder1/table1"
WHERE age >= 18
256 1707491
>>707483
Используй жс, так понятнее будет
257 1707512
>>707483
что за БД то ебаный в рот
258 1707533
259 1707537
>>707533
NTFS не умеет в SQL
260 1707542
>>707537
Ясно нубас
261 1707816
>>707483
Выбрать стоблцы Имя/Возраст
Из таблицы
Где возраст больше 18
263 1707820
>>704906
Тебе не sqlex решать нужно, а скилл русского подтянуть, половина анонов не поняли что ты спросить то хотел.
264 1708015
>>704861
Всё ещё бамп
image.png16 Кб, 491x487
265 1708025
Блин, как к Postgres на Винде подконнектиться?..
На Линухе я просто заходил через sudo psql и мне было поебать, сейчас на винде (pgAdmin установлен если что, но он не сильно помогает) при попытке приконнектиться через терминал командой psql появляется вот эта залупа: psql: ВАЖНО: пользователь "Антон" не прошёл проверку подлинности (по паролю). Как подконнектиться-то? (нового юзера с помощью CREATE ROLE Антон WITH LOGIN PASSWORD 'password' я уже создал, но толку никакого, psql меня не признает)
266 1708103
>>708015
Принцип FIFO это как?
267 1708116
>>708103
First in-First out Ты в школе не учился?
268 1708153
>>708015
Твоя задача непонятна.

Если в id=1 вошло 3, а вышло 2, то почему осталось 2?
И да, если ты считаешь число вошедших/вышедших, а не их самих, то какой там порядок (FIFO/LIFO) не имеет значения.
269 1708155
>>708153
Нужно совместить ID входов с ID выходов. Если количества на входе не хватает, то разбить на две записи.
image.png2 Кб, 147x170
270 1708166
>>708153
У что тут непонятного?
271 1708173
>>708166
При помощи оконной функции sum из table_in и table_out делаешь интервалы

Для table_in:
ID IDX_START IDX_END
1 1 3
2 4 6

Для table_out:
ID IDX_START IDX_END
1 1 2
2 3 4
3 5 5

Потом берёшь все интервалы из table_in и table_out и попарно пересекаешь.
272 1708236
>>708116
ок, иди нахуй, сам разбирайсмя со своим говном тогда.
image.png5 Кб, 858x121
273 1708723
Что за руснявое говно в именах строчек таблиц? Откуда оно взялось блин? Мне оно нахрен не сдалось
274 1708857
>>708723
кодировку поменяй в выводе
20160205100222fb8a394c357a490b08d5fc6b34a4c585.jpg65 Кб, 604x468
275 1708870
>>708857
чот проиграл, руснявое говно оказалось, не в кодировке, а за клавиатурой.
276 1708888
>>707818
Спасибо.
277 1709035
>>708025
Есть вариант форс коннекта через psql -U postgres: вход от имени юзера postgres
278 1709182
>>708025
В pg_hba пользователь прописан? Или any?
279 1709886
Как правильно хранить списки в MS SQL? Как хранить просто данные о том, что есть множество A и оно состоит из элементов a1, a2 и a3 я понимаю, но как правильно хранить информацию о том, что у меня есть список из элементов a1, a2 и a3, в который пользователь может вставить элемент a4 на вторую позицию и список станет a1, a4, a2, a3, я не понимаю.

Вот допустим есть две таблицы:

CREATE TABLE [dbo].[Item]
(
Item_ID INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(50) NOT NULL,
CONSTRAINT PK_Item PRIMARY KEY CLUSTERED(Item_ID)
);

CREATE TABLE [dbo].[Zone]
(
Zone_ID INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(50) NOT NULL,
CONSTRAINT PK_Zone PRIMARY KEY CLUSTERED(Zone_ID)
);

И мне нужно хранить информацию о расположении элементов в зонах.

Я могу банально сделать вот так:

CREATE TABLE [dbo].[Item_Zone_Position]
(
Item_ID INT NOT NULL,
Zone_IDINT NOT NULL,
Position INT NOT NULL,
CONSTRAINT PK_Item_Zone_Position PRIMARY KEY CLUSTERED(Item_ID),
CONSTRAINT FK_Item_Zone_Position_Item FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID),
CONSTRAINT FK_Item_Zone_Position_Zone FOREIGN KEY(Zone_ID)
REFERENCES [dbo].[Zone](Zone_ID)
);

Но тогда при вытаскивании первого элемента мне придётся обновлять позицию у оставшихся элементов в зонах и если из этой таблицы будут одновременно много чтений и записей, то меня закидает дедлоками.

Есть такой вариант, его проще обновлять, но для чтения придётся использовать рекурсивное CTE:

CREATE TABLE [dbo].[Item_Zone_Position_V2]
(
Item_ID INT NOT NULL,
Zone_IDINT NOT NULL,
Previous_Item_ID INT NULL,
CONSTRAINT PK_Item_Zone_Position_V2 PRIMARY KEY CLUSTERED(Item_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Item FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Zone FOREIGN KEY(Zone_ID)
REFERENCES [dbo].[Zone](Zone_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Item2 FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID)
);

Есть ещё вариант с тем, чтобы хранить в таблице с позициями ещё и версию расположения элементов в конкретной зоне и вместо UPDATE делать INSERT, но тогда таблицу придётся как-то чистить от предыдущих состояний и как-то избегать ситуаций, когда две транзакции пытаются записать туда данные одновременно (предыдущие два варианта меня подкупают тем, что они должны работать без явно указанных блокировок на стандартном уровне изоляции транзакций).

У меня в голове ещё крутится идея о том, что можно было бы создать таблицу с возможными позициями в зонах (ID позиции, ID Зоны, номер позиции в зоне, ID предыдущей позиции в зоне, ID следующей позиции в зоне) и таблицу-связку для хранения информации о том в какой позиции находится соответствующий элемент. В чём тут профит я не понял, но наверное какой-то должен быть.

Так как лучше будет, чтобы быстро, безопасно и без дедлоков?
279 1709886
Как правильно хранить списки в MS SQL? Как хранить просто данные о том, что есть множество A и оно состоит из элементов a1, a2 и a3 я понимаю, но как правильно хранить информацию о том, что у меня есть список из элементов a1, a2 и a3, в который пользователь может вставить элемент a4 на вторую позицию и список станет a1, a4, a2, a3, я не понимаю.

Вот допустим есть две таблицы:

CREATE TABLE [dbo].[Item]
(
Item_ID INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(50) NOT NULL,
CONSTRAINT PK_Item PRIMARY KEY CLUSTERED(Item_ID)
);

CREATE TABLE [dbo].[Zone]
(
Zone_ID INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(50) NOT NULL,
CONSTRAINT PK_Zone PRIMARY KEY CLUSTERED(Zone_ID)
);

И мне нужно хранить информацию о расположении элементов в зонах.

Я могу банально сделать вот так:

CREATE TABLE [dbo].[Item_Zone_Position]
(
Item_ID INT NOT NULL,
Zone_IDINT NOT NULL,
Position INT NOT NULL,
CONSTRAINT PK_Item_Zone_Position PRIMARY KEY CLUSTERED(Item_ID),
CONSTRAINT FK_Item_Zone_Position_Item FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID),
CONSTRAINT FK_Item_Zone_Position_Zone FOREIGN KEY(Zone_ID)
REFERENCES [dbo].[Zone](Zone_ID)
);

Но тогда при вытаскивании первого элемента мне придётся обновлять позицию у оставшихся элементов в зонах и если из этой таблицы будут одновременно много чтений и записей, то меня закидает дедлоками.

Есть такой вариант, его проще обновлять, но для чтения придётся использовать рекурсивное CTE:

CREATE TABLE [dbo].[Item_Zone_Position_V2]
(
Item_ID INT NOT NULL,
Zone_IDINT NOT NULL,
Previous_Item_ID INT NULL,
CONSTRAINT PK_Item_Zone_Position_V2 PRIMARY KEY CLUSTERED(Item_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Item FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Zone FOREIGN KEY(Zone_ID)
REFERENCES [dbo].[Zone](Zone_ID),
CONSTRAINT FK_Item_Zone_Position_V2_Item2 FOREIGN KEY(Item_ID)
REFERENCES [dbo].[Item](Item_ID)
);

Есть ещё вариант с тем, чтобы хранить в таблице с позициями ещё и версию расположения элементов в конкретной зоне и вместо UPDATE делать INSERT, но тогда таблицу придётся как-то чистить от предыдущих состояний и как-то избегать ситуаций, когда две транзакции пытаются записать туда данные одновременно (предыдущие два варианта меня подкупают тем, что они должны работать без явно указанных блокировок на стандартном уровне изоляции транзакций).

У меня в голове ещё крутится идея о том, что можно было бы создать таблицу с возможными позициями в зонах (ID позиции, ID Зоны, номер позиции в зоне, ID предыдущей позиции в зоне, ID следующей позиции в зоне) и таблицу-связку для хранения информации о том в какой позиции находится соответствующий элемент. В чём тут профит я не понял, но наверное какой-то должен быть.

Так как лучше будет, чтобы быстро, безопасно и без дедлоков?
280 1709887
>>709886

С кодом таблиц произошла неприятность, скопировал сюда: https://pastebin.com/7tTcemu7
282 1710021
Какой правильный синтаксис, если я хочу взять сначала из таблицы все записи меньше параметра_1 а из полученных данных взять только записи больше параметра_2?
Я так понимаю надо использовать запрос и ещё внутри подзапрос. Но с синтаксислм что-то не получается
283 1710026
>>709950

Ну это примерно соответствует моему первому варианту.

А что будет в том случае, когда кто-то будет читать данные из таблицы, по которой идёт этот UPDATE? Часть таблицы заблокирует UPDATE, часть SELECT и скажи привет дедлоку. Если бы я контролировал то, как эти запросы расставляют блокировки, то я бы просто сделал бы так, чтобы они блокировали требуемые им ресурсы в одном и том же порядке, что исключило бы вероятность дедлоков, но у меня нет такой возможности (по крайней мере я не знаю способов так сделать).

Ещё я не понял как обстоят дела с индексами и ключами: судя по коду твоего примера там нет ни ключей, ни индексов на столбце order, т.е. если я буду играться с блокировками, то этот
update table
set order = order - 1
where order >= ? and order <= ?;

просто заблокирует мне эти строки, но не защитит меня от ситуаций, где другая транзакция вставляет строки, которые тоже подпадают под это условие, что в свою очередь может привести к нарушению целостности данных.

Я имею ввиду ситуацию:

Транзакция 1:

1. Выкидывает из плейлиста песню с номером 5.
2. Песни с номерами больше 5 уменьшают свой номер на 1.

Транзакция 2:

1. Определяет последний номер песни в плейлисте.
2. Вставляет новую песню с номером на 1 больший, чем максимальный.

Если эти операции физически выполнятся вот так, то фигня получится:

1. Транзакция 2, шаг 1.
2. Транзакция 1, шаг 1.
3. Транзакция 1, шаг 2.
4. Транзакция 2, шаг 2.

В итоге получится, что после первой транзакции список 1, 2,3 ... 100 превратится в 1,2,3,..99, а вторая транзакция превратит его в 1,2,...99,101. Ну и само собой это не единственный вариант такой коллизии, могут быть ещё в варианты с присвоением одного и того же номера двум элементам одновременно.
283 1710026
>>709950

Ну это примерно соответствует моему первому варианту.

А что будет в том случае, когда кто-то будет читать данные из таблицы, по которой идёт этот UPDATE? Часть таблицы заблокирует UPDATE, часть SELECT и скажи привет дедлоку. Если бы я контролировал то, как эти запросы расставляют блокировки, то я бы просто сделал бы так, чтобы они блокировали требуемые им ресурсы в одном и том же порядке, что исключило бы вероятность дедлоков, но у меня нет такой возможности (по крайней мере я не знаю способов так сделать).

Ещё я не понял как обстоят дела с индексами и ключами: судя по коду твоего примера там нет ни ключей, ни индексов на столбце order, т.е. если я буду играться с блокировками, то этот
update table
set order = order - 1
where order >= ? and order <= ?;

просто заблокирует мне эти строки, но не защитит меня от ситуаций, где другая транзакция вставляет строки, которые тоже подпадают под это условие, что в свою очередь может привести к нарушению целостности данных.

Я имею ввиду ситуацию:

Транзакция 1:

1. Выкидывает из плейлиста песню с номером 5.
2. Песни с номерами больше 5 уменьшают свой номер на 1.

Транзакция 2:

1. Определяет последний номер песни в плейлисте.
2. Вставляет новую песню с номером на 1 больший, чем максимальный.

Если эти операции физически выполнятся вот так, то фигня получится:

1. Транзакция 2, шаг 1.
2. Транзакция 1, шаг 1.
3. Транзакция 1, шаг 2.
4. Транзакция 2, шаг 2.

В итоге получится, что после первой транзакции список 1, 2,3 ... 100 превратится в 1,2,3,..99, а вторая транзакция превратит его в 1,2,...99,101. Ну и само собой это не единственный вариант такой коллизии, могут быть ещё в варианты с присвоением одного и того же номера двум элементам одновременно.
284 1710031
>>710021
select ★ from (select ★ from my_table where a < param_1) where a > param_2;

Но зачем? Результат будет такой же, как без подзапросов, через and.
285 1710032
>>710021

>Какой правильный синтаксис, если я хочу взять сначала из таблицы все записи меньше параметра_1 а из полученных данных взять только записи больше параметра_2?


>Я так понимаю надо использовать запрос и ещё внутри подзапрос. Но с синтаксислм что-то не получается



Почему нельзя объединить эти два условия в одном запросе:
WHERE
[Table1].[Field1] < @Param1
AND
[Table1].[Field1] > @Param2
286 1710059
>>710031
А про скорости?
287 1710066
>>710059

>А про скорости?



SQL - это декларативный язык, ты пишешь ЧТО ты хочешь получить, но не пишешь КАК и не пытаешься быть умнее, чем оптимизатор запросов.
288 1710085
>>710066
Почему тогда в вакансиях пишут "навыки оптимизации SQL-запросов"? Сейчас не вспомню где именно, но несколько раз точно попадались.
289 1710104
>>710085

>Почему тогда в вакансиях пишут "навыки оптимизации SQL-запросов"


>>710066

>ты пишешь ЧТО ты хочешь получить, но не пишешь КАК



Здесь нет противоречия. Даже если тебе требуется переписать запрос таким образом, чтобы он быстрее выполнялся, то ты всё равно пишешь это в декларативном стиле, чтобы оптимизатор запросов построил более выгодный план выполнения, напрямую план выполнения ты не контролируешь (почти).
290 1710123
>>638710 (OP)
Анон, будь добр, линкани ссылку на тренировочную базу для изучения функционала sql server
291 1710124
>>707816
Больше или равно 18

мимо зануда
293 1710325
>>710222
Благодарю.
294 1710532
>>652440
А если я хочу рости быстре коллег которые так же хуярят?
295 1710811
капслокобляди
296 1710815
>>710811
ЧТО ТЕБЕ НЕ НРАВИТСЯ?
297 1710903
>>710815
Что до сих пор нет нормального набора операций из реляционки. Вам бы лишь юбилей двухзначного номера версии отпраздновать поскорее. ГДЕ МОЙ SUBTRACT БЛЯДТЬ?!
298 1710911
>>710532
Тогда почитывать матчасть на досуге. Главное не перегореть, заливать работу личным временем говнопрактика.
299 1712037
>>638710 (OP)
Если я сделал SELECT с припиской ORDER_BY а затем отфильтровал этот упорядоченный дамп записей через SELECT WHERE то получившийся ответ так же будет упорядочен, или надо сновая юзать order by?
300 1712043
>>712037
Снова надо писать.
Поэтому order by бесполезен везде, кроме самого внешнего select, за исключением использования вместе с limit или с чем-то подобным.
301 1712052
>>712037

>Если я сделал SELECT с припиской ORDER_BY а затем отфильтровал этот упорядоченный дамп записей через SELECT WHERE то получившийся ответ так же будет упорядочен, или надо сновая юзать order by?



Лучше всего представить себе запрос SELECT X FROM T1 WHERE Y ORDER BY Z как T1.Where(Y).Select(X).OrderBy(Z), где Where, Select и OrderBy - это методы (функции) определённые на соответствующих классов. При такой записи станет понятнее, что такое логический порядок выполнения операторов SQL. Так вот, в такой форме ещё легче понять почему если Select и Where возвращают таблицы (неупорядоченный набор данных по определению), а OrderBy возвращает курсор (объект, позволяющий читать данные из таблицы по одной строке в определённом порядке), то после того, как OrderBy вызван, последующий вызов Where снова вернёт нам таблицу, т.е. неупорядоченный набор данных. Строго говоря в зависимости от реализации ты можешь получать и упорядоченный набор данных в некоторых случаях, но рассчитывать на это нельзя.

>>712043

>Поэтому order by бесполезен везде, кроме самого внешнего select, за исключением использования вместе с limit или с чем-то подобным



И что особенно важно бесполезен в представлениях (VIEW).
302 1712539
>>710026

>просто заблокирует мне эти строки, но не защитит меня от ситуаций, где другая транзакция вставляет строки, которые тоже подпадают под это условие, что в свою очередь может привести к нарушению целостности данных.



Бамп вопросу
303 1712643
Как проходит например вот такое сравнение:
SELECT
CASE WHEN '00:00:00' >= '00:00:00' THEN 1
ELSE 0
END

Он сравнивает побитово? Или как-то магическим образом понимает что это время?
304 1712657
Сильно плохо обновлять поля, даже если значение не поменялось? Использую андроидовскую орм Room которая под капотом использует sqlite. Думаю, стоит ли городить проверки в запросах и в коде ради возможной производительности, или тупо обновлять объект целиком, при этом написав меньше говнокода.
305 1712677
>>712643

>Он сравнивает побитово? Или как-то магическим образом понимает что это время?



На этапе компиляции определяется тип строкового литерала.

>>712657

>умаю, стоит ли городить проверки в запросах и в коде ради возможной производительности, или тупо обновлять объект целиком, при этом написав меньше говнокода



Вариант с обновлением всех полей может оказаться даже быстрее, т.к. запрос на обновление меняться не будет и его план выполнения прокешируется.

>Использую андроидовскую орм Room



Сильно зависит от реализации этой штуки, но я бы не задумывался об оптимизации раньше времени.
306 1712869
>>712657
А что мешает merge делать?
307 1712899
Сейчас столкнулся с интересной хуйней в МуСкле, объясните пожал-ста:
В `хуи` где-то 30к записей (у всех есть ид), в `пезды` 120к (у всех есть ид), в `хуи` есть 20 id, которых нет в `пездах`.
Такой джоин (можно просто на иннер заменить, не важно) занимает 4 секунды:

select from хуи
left join пезды on пезды.ид=хуи.ид
where пезды.ид is null

а такой джоин - 4 минуты:

select
from хуи
left join пезды on пезды.ид=хуи.ид

Как так получается, что из-за всего 20 ид, которые джоинятся с нуллом, запрос начинает значительно дольше работать?
308 1712909
>>712899
Пардон, не то написал, первый запрос выглядит вот так, вопрос тот же:

select ★ from хуи
left join пезды on пезды.ид=хуи.ид
where пезды.ид is NOT null
309 1712931
>>712899

>хуйней в МуСкле, объясните пожал-ста



С мускулом не работал, но по слухам у вас там есть команда EXPLAIN, выполнив которую ты получишь ответ на свой запрос.

https://habr.com/ru/post/31129/
310 1712985
>>712931
>>712899
Хмм, на основе EXPLAIN сделал такое предположение:
так как при джоине столбец пезды.ид расширяется несколькими Null, то index на пезды.ид перестает работать, так как рассчитан только на not null.
Но это хуйня какая-то, я думал сначала по индексам все достается, выполняется джоин и уже потом идет null-extension для строк справа.
311 1713650
>>712899
>>712985
Так при иннере этой проблемы быть не должно
312 1713695
>>713650
но ведь хуев гораздо больше пезд и пезды очень придирчивы.
image.png1,9 Мб, 1063x960
313 1713808
>>638710 (OP)
Несколько вопросов, антонсы.

1. MSSQL Always On бывает без листенера? Или подразумевается, что в always on кластере он всегда существует, даже если я не использую балансировку нагрузки (селектов)?

2. Допустим у меня есть готовый кластер MSSQL Always On и есть другая, отдельная бд MSSQL без всяких кластеров, к которой подключено приложение.
Мне надо с минимальным простоем это приложение перекинуть на always on. Соответственно, мне надо как-то перенести данные из старой базы в новый кластер.
Опять же, если с минимальным простоем приложения, то мне нужно заранее как-то зазеркалить/отреплицировать/что-нибудь старую базу в новый кластер. А потом я просто ткну в приложухе, мол конекться не к старой БД, а к новому кластеру и оно сразу законектится и заебись.
Так вот, как мне зазеркалить БД с кластером, чтоб в кластере были те же данные?

С меня 5 кило гречки
314 1713840
>>713650
При иннере проблемы не будет. Но нужен лефт к пездам справа, да и разобраться почему так происходит хочется.
315 1713850
>>713840
Мы тут гадать должны три треда?
Неконструктивно обсуждать запросы без плана. Слишком много вариантов.
316 1713925
>>713840
Отфильтруй сначала в CTE, а потом ебани свой жоин.
317 1714223
Ананасы, дайте подсказку, пожалуйста?

Объясню на примере. Пусть есть такие таблицы:

1) Таблица "Сотрудники"
---------------------------------------------------------------
| id сотр |Табельный номер| ФИО |
---------------------------------------------------------------
| 0 | 1 |Иванов И. К. |
| 1 | 2 |Иванов И. А. |
| 2 | 3 |Иванов И. Б. |
---------------------------------------------------------------
2) Таблица "Услуги"
-------------------------------------------------
| id усл |Наименование услуги|
--------------------------------------------------
| 0 |Массаж простаты |
| 1 |Отбеливание ануса |
--------------------------------------------------
3) Таблица "Услуги сотрудников"
-----------------------------------------------------------
| id усл сотр | id сотр | id усл |
-----------------------------------------------------------
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 1 |
| 3 | 2 | 0 |
-----------------------------------------------------------

Как можно получить такое:
----------------------------------------------------------------------------------
|Наименование услуги| ФИО сотрудников, оказывающих услугу|
----------------------------------------------------------------------------------
| Массаж простаты | Иванов И. К. |
| | Иванов И. Б. |
----------------------------------------------------------------------------------
|Отбеливание ануса | Иванов И. К. |
| | Иванов И. А. |
----------------------------------------------------------------------------------
?

Я даже точно не знаю, как сформулировать запрос для гугла. Студент на Access и C#, если что.
317 1714223
Ананасы, дайте подсказку, пожалуйста?

Объясню на примере. Пусть есть такие таблицы:

1) Таблица "Сотрудники"
---------------------------------------------------------------
| id сотр |Табельный номер| ФИО |
---------------------------------------------------------------
| 0 | 1 |Иванов И. К. |
| 1 | 2 |Иванов И. А. |
| 2 | 3 |Иванов И. Б. |
---------------------------------------------------------------
2) Таблица "Услуги"
-------------------------------------------------
| id усл |Наименование услуги|
--------------------------------------------------
| 0 |Массаж простаты |
| 1 |Отбеливание ануса |
--------------------------------------------------
3) Таблица "Услуги сотрудников"
-----------------------------------------------------------
| id усл сотр | id сотр | id усл |
-----------------------------------------------------------
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 1 |
| 3 | 2 | 0 |
-----------------------------------------------------------

Как можно получить такое:
----------------------------------------------------------------------------------
|Наименование услуги| ФИО сотрудников, оказывающих услугу|
----------------------------------------------------------------------------------
| Массаж простаты | Иванов И. К. |
| | Иванов И. Б. |
----------------------------------------------------------------------------------
|Отбеливание ануса | Иванов И. К. |
| | Иванов И. А. |
----------------------------------------------------------------------------------
?

Я даже точно не знаю, как сформулировать запрос для гугла. Студент на Access и C#, если что.
318 1714230
>>714223
Все-таки сожрались пробелы. Тогда так. Есть пик1, как получить пик2 ?
319 1714237
>>714230
Сука ебланская про иннер джойн прочитай одну страничку блядь а не спрашиай на двачах сука
даже не одну страничку блядь а достаточно строчек 10 описания и пару примеров, чтобы понять как оно работает еблан сука
320 1714243
>>714237
И как мне иннер джойн здесь поможет?
321 1714263
>>714237
Отвечай давай, или сука ебланская, еблан, сука и так далее здесь только ты.

Мне нужно, чтобы строки были как бы объединены, не было повторов, если такое возможно. На примере - по услугам. То есть в первом столбце - наименование услуги, во втором - все сотрудники, к этой услуге относящиеся. То есть ФИО находятся в одной ячейке, и всего строк в получившейся таблице столько, сколько имеется услуг.

Как здесь одним иннер джойном обойтись, раскроешь секрет?
322 1714769
>>714263
Ебать ты далбаеб братишка.
пиздуц от суда нахуй, пока не обоссали

Аноны не помогайте этому тупому, агрессивному чухану. Мало того что в гугле забанен, так еще и хамит.
мимокрок
323 1714775
>>714263
Боюсь, что такое средстами Access не сделать.
Если бы была более навороченная СУБД, то можно было бы примерно так:
1. Джоинами делаешь таблицу
Наименование услуги | ФИО сотрудника
2. Делаешь string_agg/group_concat/listagg/костыль через конверсию в xml (зависит от СУБД) на ФИО сотрудника. группируя по наименованию услуги.

Возможные грабли: услуги с однаковыми названиями, услуги без сотрудников, решение надо будет чуть подкорректировать.
324 1714791
>>714775
Пивот же
325 1714804
>>714775

>Боюсь, что такое средстами Access не сделать.



https://stackoverflow.com/questions/5517233/ms-access-query-concatenating-rows-through-a-query
image.png34 Кб, 490x370
326 1714956
Приветик.
Подскажите, почему при соединении двух таблиц вывод получается с дублями? У них разное число строк, может в этом дело (хотя у одной таблицы 4 строки, у другой - 2, а на выходе их 6.)?
327 1714967
>>714956
Без ON у тебя cross join, который джойнит все со всеми.
328 1714976
>>714967
>>714956
Да, ты типо пришёл в проститучноую и вместо одной шлюхи, заказал оргию.
329 1715063
>>710026

>В итоге получится, что после первой транзакции список 1, 2,3 ... 100 превратится в 1,2,3,..99, а вторая транзакция превратит его в 1,2,...99,101. Ну и само собой это не единственный вариант такой коллизии, могут быть ещё в варианты с присвоением одного и того же номера двум элементам одновременно.



Бамп вопросу
330 1715078
>>715063
Мне кажется эта задача для оконных функций. Каким-нибудь rownumber
331 1715107
>>715063
Если уж хочется без явных блокировок, то думаю, что стоит посмотреть, как делается lock-free linked list в памяти и попробовать то же самое реализовать в БД: ведь CAS там есть.
Но неужели нельзя просто брать блокировку на весь плейлист?
332 1715249
>>714775
>>714791
>>714804
Спасибо.

>>714769
Я и сказал, что не знаю, как сформулировать запрос гуглу, чтобы выйти на то, что мне нужно. Попросил подсказать, ни к чему не принуждал. И в итоге на меня наехал какой-то дурачок, который даже не разобрался, в чём суть. Всё, что я сделал - ответил ему тем же и поставил на место с его советами не по делу. А тот и замолчал - спесь сбилась, видимо. Ну ничего, будет думать в следующий раз и подбирать выражения, если не нравится, когда действуют его же методами.

Не считаю, что был не прав. И агрессивный здесь точно не я.
333 1715405
>>715078

>Мне кажется эта задача для оконных функций. Каким-нибудь rownumber



Не вижу как это может помочь.

>>715107

>Но неужели нельзя просто брать блокировку на весь плейлист?



Каким образом?
334 1715414
>>715405
Завести таблицу с id всех плейлистов,
При модификации элементов одного брать блокировку на строку из этой таблицы.
335 1715420
>>715405
Строить логику не на изменении записей, а на выборке. Делать rn по дате обновления например, в таком случае обновленные будут иметь 1, а более старые 2. Т.е. перенести логику на уровень возврата результатов, а не на уровень самой таблицы. Можно делать по двум полям порядковй номер и дата обновления.
336 1715568
>>715414

>При модификации элементов одного брать блокировку на строку из этой таблицы.



У меня нет возможности блокировать отдельные строки. Сейчас я обхожусь тем, что блокирую (UPDLOCK) все данные в плейлисте (технически в таблице-связке между плейлистами и песнями), откуда идёт перемещение, и в плейлисте, куда идёт перемещение, но это не защищает меня от того, что другая транзакция вставит туда данные. Я пока думаю над тем, чтобы создать некластерный индекс на столбец с id плейлиста и позицией в нём и блокировать данные с UPDLOCK,HOLDLOCK.
337 1718332
Как грамотно отслеживать изменения в бд?

Интересуют в первую очередь процедуры и вью. Кто, когда и что.
sage 338 1718439
>>718332
никак.
хотя есть вагон платных тулзов типа dbforge.
натравил на вчераший бекап и сверяешь.
339 1718503
>>718332

>Как грамотно отслеживать изменения в бд?


>Интересуют в первую очередь процедуры и вью. Кто, когда и что.



Гугли по слову audit, в зависимости от используемой СУБД должны быть средства подписаться на события создания/удаления/изменения объектов БД (а так же выдачу прав и всё остальное, что тебя может интересовать). После этого регулярно читаешь этот лог и делаешь замечания программистам, которые забывают внести информацию о том, что они поменяли хранимку или вьюшку в связи с таким-то тикетом в комментарий в её заголовке и/или закоммитить скрипты.
340 1719912
>>718332

> Как грамотно отслеживать изменения в бд?


Сменить пароль, поставить git и дженкинс, настроить CI/CD, просить кидать МР на себя.
341 1720359
Котаны, помогите написать сложный запрос, решающий следующую задачку:

https://cloud.mail.ru/public/TaUD/hHeVNeWwx
342 1720370
>>720359
СУБД какая? Это важно, так как функции работы со строками зависят от СУБД.
Может ли между значениями быть несколько пробелов?
343 1720420
>>720370
Postgresql
А где пробелы? В списке, куда мы хотим группировать по 3 значения?
344 1720465
>>720420

> Postgresql


Думаю, эта функция тебе поможет:
split_part(string text, delimiter text, field int)
https://www.postgresql.org/docs/current/functions-string.html
345 1720534
>>720359
Чот проиграл от этих 'сложных' задач, которые решаются простым подзапросом.
346 1720628
>>720465
>>720534
Вы вверх крутаните и увидите начало. Там суть в том, чтобы для каждого col1 вывести список из 3 соответствующих ему col2, при этом если для col1 больше 3 col2, то это делается в несколько строк
347 1720637
>>720628
Тогда такое могу предложить:
https://www.db-fiddle.com/f/t4DohQY557vL1fs4gnRoML/0

SELECT
col1, string_agg(col2, ' ')
FROM (
SELECT
id,
col1,
col2,
row_number() over (partition by col1 order by id) as idx
FROM t
) q
WHERE idx <= 3
GROUP BY col1;
348 1720647
>>720637
Во, это уже ближе к тому, что я хочу. Теперь осталось добиться того, чтобы ещё вывелась строка:
col1 col2
suka d
349 1720652
>>720647
Тогда такое
https://www.db-fiddle.com/f/t4DohQY557vL1fs4gnRoML/1

SELECT
col1, string_agg(col2, ' ' order by id)
FROM (
SELECT
id,
col1,
col2,
(row_number() over (partition by col1 order by id) - 1) / 3 as group_no
FROM t
) q
GROUP BY col1, group_no;
350 1720655
>>720652
Тонны нефти тебе, достопочтенный анон!
351 1720657
>>720655
Рекомендую порешать задачи на sql-ex, чтобы легко щёлкать такие задачи.
352 1720736
>>638710 (OP)
В Postgres (с которой общаюсь посредствам django orm) в одной из таблиц есть поле is_active, оно BOOL: true или false, приходятся часто выбирать только активные объекты (is_active == true), какой индекс туда лучше заебошить?
353 1721065
>>720736
Частичный
image.png62 Кб, 1336x411
354 1722148
Ребят. подскажите пожалйуста, не работает триггер, подскажите в чём ошибка? Может знает кто...
DELIMITER $$
CREATE
TRIGGER Orders_Trig BEFORE AFTER INSERT OR UPDATE
ON orders
FOR EACH ROW BEGIN
IF:(NEW.SUMMA>10000)
THEN
UPDATE strakhovka SET Cena_strakhovki = 0 WHERE (ID_Car=:NEW.ID_Car)
END IF;

END$$

DELIMITER ;
355 1723033
>>722148
>>722148
Before after
Screen Shot 2020-06-15 at 12.40.22.png54 Кб, 704x376
356 1723585
Помогите ньюфажине. Как составить запрос "сколько у какой страницы за последнюю неделю было посещений с уникального айпи"? Если один айпи посетил страницу за эту неделю несколько раз, то засчитывается как одно посещение.
357 1723669
>>723585
Group by + count
358 1723678
>>723669
GROUP BY ip не сработает, потому что тогда он возьмет только первую посещенную страницу, даже если посещено было несколько
359 1723681
>>723678
ну сделай же group by page,ip;
неужели не очевидно?
360 1723707
>>723681
Ну я ж ньюфаг.

SELECT COUNT(DISTINCT ip) FROM table GROUP BY page
сработал. Это то же самое, что и двойной GROUP BY?
361 1723945
Читаю документацию postgres про многопоточность и что-то не догоняю. Так в каком уровне изоляции можно соблюдать принцип читатель-писатель и не волноваться за некорректные снапшоты?
362 1724010
>>723945
Что за принцип читатель-писатель?
Это как read-write блокировка: Или это producer-multiple consumers, где один процесс создаёт записи, каждую из которых должен обработать только один из потребителей?
363 1724028
>>723707
Нет.
То ли мне лень понимать тебя, то ли ты неверно думаешь.
364 1726125
Какой есть аналог aws для бомжей?
365 1726217
>>726125
Балтика девятка
366 1726305
>>726125
Локалхост.
367 1726319
>>726125

> Какой есть аналог aws для бомжей?



https://www.youtube.com/watch?v=KbVcRQQ9PNw
368 1726466
>>726305
Проиграл
369 1726505
>>726125
Смотря что тебе нужно от AWS. Если нужны просто VPS, то самый дешевый hetzner. Есть почасовая оплата.

>>726319
Кластер из малинок - это, конечно, круто. Но малинка довольна слабая. И я даже не уверен, что малинка превосходит типичные компьютеры с x86 по отношению производительность/$.
370 1726557
>>726125
Охуенно сформулированный вопрос, учитывая, что а авс дохуилиард сервисов.
Мой внутренний прорицатель осознал, что вопрос задан в треде бд, а потом послал тебя нахуй.
maxresdefault.jpg118 Кб, 1280x720
371 1727504
Привет. На связи джун-фулстек с проектом на ms sql server'ах 2014+. В последнее время все чаше нахожу себя пишущим сложные (для меня) запросы с множеством условий, джойнов, групировок, оконных функций, юнионов и т.п. и строгими нуждами по скорости выполнения и потреблению ресурсов. Потому возник вопрос: есть ли какая литература, чтоб SELECT'ты выполнялись молниеносно и потребляли мало памяти, merge и update не дедлочил? А может заговоры порекомендуете?
372 1727687
Гайз есть кто живой? Пишет зеленый, никогда раньше не сталкивался c базами данных, по этому прошу помощи.
Кину вам на карту 200р (хахах, я понимаю это мало, но больше не могу дать) за помощь в одном деле, работы максимум на 10 минут.

У кого есть возможность и желание помочь, пишите в телегу:
@vovafist
373 1727689
>>727687
Пиши сразу вопрос тут
374 1727691
>>727689
лучше в телегу, это личное, это другое...
375 1728677
>>727691
Взломать вконтакте?
376 1728758
>>728677
нет, кстати за 2 дня никто не откликнулся, было две простые задачи на выборку. (спросите почему я их сам не решил, я был на работе оба дня)
377 1728979
>>728758
Потому что всем лень писать тебе в телегу.
Написал бы задачи тут, можно чуть в видоизменённом виде - поменяв названия таблиц и столбцов, быстро бы получил ответ.
378 1729510
Хочу написать магистерскую диссертацию на тему баз данных. Я вообще фулстак разработчик, что касается баз данных, то частенько приходится иметь дело с ораклом.
И вот я решил что поскольку тема баз данных очень обширная, то можно будет какое нибудь направление исследовать и написать выпускную работу
Аноны, может вы можете предложить какую нибудь тему? Или может кто уже писал подобные работы
379 1729615
>>729510
Отвечаю в треде про постгрес не про постгрес, но для себя в базах данных я нашёл https://github.com/mit-pdos/noria.
Интересная поделка, которая оптимайзит запросы, храня у себя materialized views для тех запросов, что ей уже встречались. В README репозитория есть ссылка на пейпер, на мой взгляд, про это можно интересно рассказать.
c1VVhRytnA.jpg99 Кб, 792x1188
381 1730699
SELECT AccountID,AccountEnabled,AllowAdmin,AllowAlertManagement,AllowTeCustomize,AllowTeReportManagement,
AllowTeAlertManagement,AllowPeUnmanage,AllowPeDisableAction,AllowSeDisableAlert,AllowSeDisableAllActions,AllowSeEventClear,AllowXeMapManagement,AllowXeNodeManagement,AllowMonReportManagement,AllowMonUnmanage,AllowViewCopCheck
FROM


Можно ли в T-SQL как-нибудь заменить такую простыню из почти одинаковых столбцов на маску?
Что-то типа Select 'Allow%' From (пробовал, не работает)
382 1731022
гайз, нужна хелпа. Суть задачи.
У меня есть некий запрос, который вовзвращает IDшники из некоторой таблицы. Количество таких айдишников много больше чем CHUNK_SIZE = 10000. Мне надо чанками эти айдишники поочереди записывать во временную таблицу tmp_some_ids (id INT), и вызывать процедуру, которая работает с этой временной таблицей (если кому интересно, эта процедура добавляет в эту тублицу еще одно поле, в котором хранится некоторые значения соответствующие ID). Потом из этой темповой таблицы выгружать полеченные данные, обработать их. И опять залить следующий чанк в tmp_some_ids, и так в цикле пока я не обработаю все записи с первого запроса.
ТАк вот у меня есть 3 стула:
1 и самый топорный) выгружить все id в память в ruby скрипте, далее рубями уже поделить все записи на чанки, и запихивать их в цикле во временную таблицу и далее по алгоритму
2) создать/очестить таблицу, к первому запросу добавить LIMIT ${page_number CHUNK_SIZE}, ${(page_number + 1) CHUNK_SIZE} и этот селект инсертить в tmp_some_ids. И в рубях в цикле инкрементить page_number + 1 пока количество заинсерченных данных не меньше CHUNK_SIZE.
3) Похожу на п. 2, только вместо лимитов использовать условие AND WHERE id > ${MY_LAST_INSERTED_ID} и так мне после каждого инсерта надо запоминать MY_LAST_INSERTED_ID = select max(id) from tmp_some_ids для следующей итерации.

Анон, на какой стул сам сядешь, на какой мать посадишь?
383 1731035
>>731022
Мои же мысли по этим пунктам таковы:
1) тип придется генерить инсерт insert into tmp_some_ids (id) values (${stored_ids[0]}), (${stored_ids[1]}), ... (${stored_ids[CHUNK_SIZE-1]) что как на мой взгляд залупа полная.
2) выглядит норм, но хз как на уровне mysql норм не норм, по сути он передрачивает один и тот же запрос много раз формируюя чанки (возможно я не прав).
3) выглядит тоже норм, но надо делать все время лишний запрос чтобы все врямя получать самый большой айди во временной таблице.
384 1731066
>>723681
Тогда мы получим уникальные пары столбцов page, ip и их count, что будет соответствовать количеству посещений с каждого ip на каждую страницу.
>>723585
>>723707
Типо того - это НЕ ТОЖЕ САМОЕ что и group by page, up и это то, что тебе нужно - ты группируешь строчки по имени страницы и дальше для каждой строчки считаешь количество уникальных айпишников в визитах.
bk2VegYLTA.jpg335 Кб, 1333x2000
385 1732321
>>730699
бмп
386 1734671
>>732321
Пилишь динамический запрос который выбирает нужные поля по шаблону их системных таблиц.

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Foods'
AND table_schema = 'YourDB'
AND column_name LIKE 'Vegetable%'
387 1735134
Скулы, здрасте, подскажите ресурсы для тренировки по типу hackerrank, но на русском, пожалуйста.
388 1735196
Правда ли Postgres настолько охрененна среди РСУБД, как он ней говорят?
389 1735484
390 1735537
>>735196

>РСУБД


ОРСУБД
391 1735582
Посоветуйте книгу про базы данных, где поясняют разницу между SQL и NoSQL подходами. С меня нихуя
Безымянный.png82 Кб, 1490x886
392 1737957
Добрый день.

Делаю сейчас задание

мой код: https://pastebin.com/zNR1ymSh

правильный код: https://pastebin.com/nFYxdG0w

Результаты выходят идентичные, но проверку не прохожу. Не могу понять, в чём мой косяк? Потому что не добавляю в группировку e.store_id?
393 1738428
Подскажите, пожалуйста, как разумнее соединить таблицу организаций с контактами организации, если в контактах может быть что угодно (куча специалитов, которые абсолютно разные в различных организациях)
394 1738609
Допустим, имеется некая таблица, изображающая производственные цепочки: если сепулька A собирается из сепулей B, C и D, то в поле parent_id у B, C и D будет стоять айдишник в базе хуйни A.

Вопрос: как наиболее эффективно протестить такую таблицу на наличие бесконечно рекурсивных связей, то есть чтобы подкомпонент хуйни C не мог являться компонетом A?
395 1738610
>>738428
Это нзывается развязка many2many.
Отдельная таблица из двух полей - айди шпециалиста и айди организации из соответствующих таблиц.
396 1738640
>>737957
а что это за тренажер?
397 1739639
>>738640

Это для начинающих совсем. https://learndb.ru/
398 1741231
>>638710 (OP)
Как именно работает та же Postgres? В качестве демона? Я когда установил ее у себя в Убунту и работал с ней посредствам Django ORM, никогда напрямую ее не запускал... Это Джанго под капотом "запускает" сервер Postgres или порт 5432 (по умолчанию) доступен с самого начала старта ОС?
399 1741236
>>741231
Да, сервер запускается системой как служба, у тебя только клиент.
400 1741305
>>737957
Что-то лень вникать, но на первый взгляд различимые в групбае, в эталонном примере, берут ещё 2 поля, т.е. если у тебя по этим полям будут другие значения, у тебя будет больше строк.
401 1741690
>>739639
Это рили для совсем начинающих? Ты не шутишь? Капец.

Тредик кого на ютабчике посоветуете для погружения?
403 1741985
>>741920
Храни тебя нормализация, спасибо
404 1741998
bump
405 1742044
У меня есть куча постов (Post) каждый из которых относится к одной из двух категорий, а внутри каждой из этих категорий будет 2 подкатегории
По какому принципу лучше всего организовать структуру БД? (Postgres, если что) ManyToMany к подкатегориям, каждая из которых имеет ForeignKey на одну из категорий? Или это нерационально? (постов в распоряжении несколько тысяч, в некоторых случаях поле category может канешн быть null, но это встречается редко)
screenshot2020-07-04at23.51.30.png1,1 Мб, 2272x2246
406 1742263
анон была проблема с mysql переустановил workbanch, но теперь не виду свои схемы как их вернуть то теперь?
407 1742270
>>742044
Да таблица категория и таблица подкатегория. Ну вобще задача попахивает мдм системой
408 1742470
>>638710 (OP)
Товарищи, возникло желание поискать себе подработку-халтуру.

Что-то такое, что будет занимать пару-тройку часов в будние дни и столько же в выходные. У меня коллеги - админы, так и работают - все время на основной работе + какое-то время на второстепенный проект.
Но проблема в том, что я как админ хорошо если чуть выше джуна. Мне приходилось и сейчас приходится иногда выполнять администраторские задачи, с терминалом и unix проблем нет, но человек который занимается этим профессионально сделает эти задачи быстрее и качественнее.

Мое направление больше соотвествует - системной разработке и архитектуре на стыке БД и ОС, оптимизация, немного етль.

И вот вопрос: можно ли по своему направлению найти part-time подработку или фриланс, на каких сайтах-ресурсах лучше искать? Если все-таки искать подработку по админским задачам, то где лучше смотреть варианты, на каких источниках?

Смотрел upwork и freelance.ru но там дичь какая-то одна по типу правки экселек. Может неправильно искал.
409 1742555
Почему Postgres может в DROP CONSTRAINT IF EXISTS, но не может в CREATE CONSTRAINT IF NOT EXISTS ?
410 1742612
>>742555
Может.
413 1742686
>>742674
На этапе создания таблицы нет смысла проверять констрейнты на наличие, потому что их гарантировано не будет, поэтому по твоей ссылке об этом ни слова нет.
image.png29 Кб, 1346x236
414 1742919
>>741690
Двачик я смог, было сложно с агрегатными ф-ями и соединениями, но вроде одуплил что там куда.
следующий этап sql-ex
работаем.
415 1742948
>>735582

>где поясняют разницу между SQL и NoSQL



Это будут две книги.

Первую прочитай от корки до корки и прям зубри нахуй. Это компьютер саенс, там есть по базам всё что только нужно.

Та шо с кабанчиком - это по NoSQL. Там во второй главе вроде было сравнение, но для него тебе надо изначально понять тонкости sql.

Пойми их и будешь крутым челом. Этого в универах часто не учат, к сожалению =.=
416 1743188
>>742948
А Дейт уже не в моде?
417 1743258
>>743188

>Дейт


он шизанулся
418 1743357
>>742948
Достаточно навернуть вводную к какому-нибудь MongoDB, чтобы понять для чего нужен NoSQL. Читать эти книги я бы не рекомендовал. Одна слишком большая и нужна разве что только разработчикам СУБД или архитекторам, а вторая - это такое попурри из различных нескучных статеек.
419 1743519
Я на виртуальной машине с Дебианом 10 поставил Postgres. Можно ли со своего ПК через pgAdmin приконнектиться к базам на этой ВМ?
420 1743520
>>743519
Надо пробросить порт.
А лучше настроить сеть как bridged и у виртуалки будет свой айпи в локалке.
421 1743604
>>743520
Хостинг с ВМ вообще в ебенях находится, а не на моей машине
Просто я ебался какое-то время в консоли, а потом узнал что есть pgadmin. Когда поставил postgres на своей машине на localhost:5432 то спокойно коннектился к серверу через pgadmin. А если ВМ далеко и я к ней через ssh по ключу коннекчюсь? Что в конфигурации на серве надо настроить чтобы меня не дропало при попытках коннекта, фаэрвол тот же?
422 1743848
Котаны, помогите разобраться с функциями времени в PostgreSQL
Нужно подсчитать количество записей в таблице с группировкой по неделям. Всё бы хорошо, но если данных за конкретную неделю не было, то в результате запроса не будет номера этой недели значения 0 во 2й колонке. А хотелось бы, чтобы было.
Ещё лучше чтобы в 1-й колонке писалось что-то вроде 2020-06-01 - 2020-06-07 вместо номера недели.

select
date_part('week', recieved_date) AS week,
COUNT(*) AS emails
from emails_table
where
recieved_date >= '2020-06-01' and
recieved_date <= '2020-06-30'
GROUP BY date_part('week', recieved_date)
ORDER BY date_part('week', recieved_date)
423 1743863
>>743848
Используй generate_series для генерации списка недель и делай left join с имейлами
424 1743954
Опять postgresql
У меня есть несколько запросов из разных таблиц, которые выводят количество или сумму нужных мне данных по месяцам.
В каждом запросе есть колонка с месяцами.
Мне нужно горизонтально объединить запросы, чтобы вывести все колонки со всех запросов. Только вот в некоторых запросах нет определённых месяцев. Джойнить их не выйдет, так как нет общих полей.
425 1743959
>>743954

> В каждом запросе есть колонка с месяцами.


> Джойнить их не выйдет, так как нет общих полей


Чем месяц не общее поле?
426 1744205
>>638710 (OP)
Меня постоянно попускают на собеседованиях на вопросах по SQL. Есть какой-нибудь годный тренажер и книжка, которая бы популярно объясняла язык SQL и его хитрости?
427 1744275
>>744205
>>739639
и в оп посте написан sql-ex
Создание БД 428 1745485
Привет парни.
Такой супер вопрос, надеюсь поможете.
В общем вкатываюсь в БД, начинаю работать с MSSMS и в самом начале охуел с такого момента. Как создавать отношения таблиц как вообще проектировать БД. Кого почитать или посмотреть грамотного что бы доходчиво объяснил про нормализацию БД, отношения, про Primary Key и все остальное. В общем буду благодарен за любую инфу.
429 1745739
>>745485
Мне помог https://www.youtube.com/user/VladimirMozhenkov Но я не говорю что я все понял и теперь у меня идеальные бд.
430 1746023
>>745739
Чот у него помойка какая-то га канале, кинь линк на плейлист по бд, есди под рукой
431 1746097
В таблице есть поле "категория", категорий всего 4, но записей в таблице несколько тысяч, часто приходится фильтровать данные по конкретной категории, какой индекс выбрать, чтобы это происходило резче? (Postgres 10 если что)
432 1746122
Привет, анон. Помоги с задачей, сам не могу справиться. Привожу минимальное описание. Есть список приборов:
CREATE TABLE IF NOT EXISTS devices (id INTEGER PRIMARY KEY); -- Остальные поля не важны
Для каждого прибора выдаются разрешения, когда его можно использовать. С одной даты до другой. Для них есть отдельная таблица
CREATE TABLE IF NOT EXISTS permits (id INTEGER PRIMARY KEY, use_from DATE NOT NULL, use_to DATE NOT NULL, permission_text TEXT NOT NULL);
Кроме этого есть определённая дата @current_date
Нужно получить таблицу, в которой будет три поля: id прибора, строка is_permited и permission_text, причём:
is_permitted может быть: "NEVER" -- разрешение никогда не выдавалось, "PERMITTED" -- в таблице содержится разрешение, такое, что use_to <= current_date AND current_date <= use_from и "NOT PERMITTED" -- в таблице нет такого разрешения.
permisson_text -- пустая строка (или NULL) для NEVER и NOT PERMITTED и permission_text действующего разрешения для PERMITED.
Сейчас делаю N запросов для получения разрешений для каждого прибора и проставляю в памяти статус, но это очень медленно, в прод такое нельзя пускать.
Буду благодарен как за код, так и просто за идеи.
Судя по всему надо делать JOIN двух таблиц, а потом как-то фильтровать результат, но ничего конкретного я сделать не могу. С SQL начал работать один проект назад.
433 1746528
>>746122
Так ёбана, у тебя между таблицей с приборами и таблицей с разрешениям связь то есть?
434 1746748
435 1746775
>>746528
Да, забыл написать.
Сделал через один запрос всех разрешений, дальше разруливаю в памяти — получается меньше секунды. Может и не буду городить всё через запрос.
pg.png18 Кб, 459x735
PostgreSQL 436 1746802
Перекатился недавно с MySQL на PostgreSQL. Кластер не настраивал, все конфиги по умолчанию.

Залил таблицу на 3кк строк, но PostgreSQL почему-то как-то странно выборку делает: каждый раз при одном и том же запросе выдаёт в основом следующие строки через N строк, либо некоторые из них вообще перемешивает.

Грешил сначала на DataGrip, потом на место на диске, но это всё не виновато.

Есть идеи, куда копать?
437 1746811
>>746802
Уточню, что когда в таблице было меньше 200к строк, такой хуйни не было.

Так же только что залил в MySQL, там всё хорошо работает,

>select id from records limit 20 offset 500;


всегда выдаёт айдишники с 501 по 520, не перескакивая случайным образом на следующие строки.
438 1746826
>>746802
limit/offset без order by может выдать всё, что угодно.
Так что это никакой не баг, а вполне допустимое поведение.
439 1746844
>>746826
У меня сейчас 10 лет разработки улетели в другую галактику php-макака. Спасибо за разъяснение, вопрос закрыт.
440 1746981
>>746802
Ну ёбана, если данные хранятся в КУЧЕ(heap), они ПРОСТО лежат, и бд дастёт их как ей вздумается, да и вобще юд всегда дастёт как ей вздумается, едис ты другого не попросишь. Если нужно доставать быстро и в нужном порядке, ордер бай, индексы, вот это всё.
441 1746987
>>746775
Делаешь лефт жоин маленькой таблицы к большой, нулевые поля заполняш NEVER, в селекте при помоще CASE заполняшь премитед\нот премитед
442 1747291
Аноны, подкиньте идей, куда податься БД-ньюфагу.
О себе:
Активно изучаю БД / прохожу курсы уже несколько месяцев, в резюме на hh уже есть несколько сертификатов по sql и python. Сейчас прохожу длинный курс "аналитика данных" от яндекс.практикум.
30+ лвл. ДС. Опыт работы - не релевантный, но работа аналитическая в финансах (без программирования).
Хочу быть Bi-аналитиком или аналитиком БД, для начала.
Стажёром в 30+ лет не вариант идти, да и вряд-ли возьмут. Откликаюсь на все, что плохо лежит (где-то 50 откликов за 2 недели), резюме смотрят, но ни на одно собеседование так и не позвали. Есть идеи куда и как можно вкатиться?
443 1747303
>>747291
Консалтинг всякий - глоубайт (туда легко попасть), EY или банки - сбербанк, втб.
444 1747715
>>746122
SELECT d.id,
CASE
WHEN MAX(use_from) <= “11.07.2020” AND MAX(use_to) < “11.07.2020” THEN “permitted”
WHEN “11.07.2020” < MAX (use_from) THEN “not permitted”
ELSE “never”
END AS permitted_text
FROM devices AS d
LEFT JOIN permits AS p ON p.device_id (или где там у тебя храниться связь)
GROUP BY d.id

Если разрешений всегда одно (devices permissions one to one), то убери group by и агрегаты. Также не забудь добавить таблицу отношения devices permissions или ссылку на device к permissions.
445 1747716
>>746802
Сортировка.
Нет никакой «дефолтной сортировки» и гарантии соответственно
446 1747717
>>747715
Алсо, считаем что диапазоны разрешений сделаны правильно, данные корректны и в них не может быть мусорного гавна
447 1747727
>>747715
Спасибо, анончик, попробую, как доберусь до офиса.
Я пока сделал всё быстро в памяти, но хочется разобраться в твоём примере
Добра тебе.
448 1747742
>>747715
чот при таком подходе можно говна поесть, если у него есть пересекающиеся пермиты
449 1747744
450 1747746
>>747744
Видимо слишком абстрактный варнинг, в общем это и имелось в виду
451 1747752
>>747746
Из-за групбая с полем комент будет проблема
452 1747754
>>746775
>>746987
Вот как-то так

with one
as
(
SELECT
p.id
,d.polename1
,p.use_from
,p.use_to
,p.premession_text
,coalesce(use_from,'1') as Permit
,row_number() over(
partition by
p.id
,use_from
,use_to
order by
use_from) as rn

FROM devices as d
left join permitsa as p
)
SELECT

id
,polename1
,use_from
,use_to
,premession_text
,CASE
WHEN use_from<=GETDATE()>=p.use_to THEN 'PERMITTED'
WHEN Permit=1, THEN 'NEVER'
ELSE NOT 'PERMITTED'
END as permitted_text

FROM one
where rn=1
452 1747754
>>746775
>>746987
Вот как-то так

with one
as
(
SELECT
p.id
,d.polename1
,p.use_from
,p.use_to
,p.premession_text
,coalesce(use_from,'1') as Permit
,row_number() over(
partition by
p.id
,use_from
,use_to
order by
use_from) as rn

FROM devices as d
left join permitsa as p
)
SELECT

id
,polename1
,use_from
,use_to
,premession_text
,CASE
WHEN use_from<=GETDATE()>=p.use_to THEN 'PERMITTED'
WHEN Permit=1, THEN 'NEVER'
ELSE NOT 'PERMITTED'
END as permitted_text

FROM one
where rn=1
453 1747756
>>747754
блять, спасибо АБУ!

https://pastebin.com/kecepnjT
454 1747758
>>747756
криво запостил, не ту версию, вот нужная
https://pastebin.com/KCBPjhaZ
455 1748048
>>747752
Прости..?
456 1748057
>>748048
Ну анон говорил что одно из полей нужное ему КОММЕНТАРИЙ, его группировать нельзя же.
хотя конечно можно через МАХ сделать
457 1748075
>>748057
Мне показалось, что там нет никакого поля, но нужно самому выдать сконструировать и выдать такой атрибут. Иначе да та прав, нихуя не выйдет и надо будет делать cte
15896402741520.jpg311 Кб, 764x1080
458 1749154
Аноны что покурить для продвинутого уровня sql?
теорию, не тренажеры
459 1749503
DBA-нуб итт

Есть какая-то уникальная колонка. Есть ли разница между запросами?

> SELECT unique_column FROM table_name;


vs

> SELECT DISTINCT unique_column FROM table_name;

460 1749582
>>749503
Ну основании чего колонка уникальна? Если просто от предметной области, то distinct будет дополнительно эту уникальность проверять. А иначе, возможно, планировщик запросов будет достаточно умным и поймёт что уникальность нет смысла проверять тк она обеспечена другими средствами
461 1749656
>>749582
Уникальный индекс. Спасибо.
462 1749911
>>638710 (OP)
Анон, подскажи, знаешь ли ты хороший сборник задач по SQL? Желательно, интерактивный.

А то на предыдущем собеседовании дали задачу быстро написать запрос, а я обсренькался, аки пидр
463 1749997
>>749911
А что за запрос? Имхо обосраться можно только с аналитическим жапросом
464 1750021
Сосач, кароч дали мне тестовое задание по SQL, конкретно по MySQL. Есть таблица департаментов (пикрил 1), есть таблица сотрудников (пикрил 2). Нужно двумя способами получить таблицу со списком сотрудников в каждом департаменте через запятую. Одним способом я сделал через GROUP_CONCAT, получился пикрил 3. А вторым хз как, подскажи. Пытаюсь в CONCAT_WS, но пока только очко раздербанил. С меня солёный хер.

Код первого способа:
SELECT d.deptno, GROUP_CONCAT(
DISTINCT e.empname ORDER BY e.empname ASC SEPARATOR ', '
) AS empnames
FROM dept d
JOIN emp e
ON d.deptno = e.deptno
GROUP BY d.deptno;

Код моего жидкого пердежа вторым способом (нерабочий):
SELECT d.deptno, CONCAT_WS(", ", (
SELECT e.empname
FROM emp e
JOIN dept d
ON e.deptno = d.deptno
)) AS empnames
FROM dept d
JOIN emp e
ON d.deptno = e.deptno
GROUP BY d.deptno;
465 1750034
>>750021
pivot?
466 1750036
Что быстрее выполнится на монге:

1. Elem.find().distinct('field') // получить выданные элементы где значение field отличается и взять число этих элементов.

2. Elem.findOne().sort('field' : -1) и получить значение field.

В данном случае эти операции будут индентичные.
И это при условии того что есть index.

Как я понимаю, поиск максимального элемента по отсортированному дереву это O(log(n)).
С другой стороны, подсчёт элементов в дереве это O(n).

То есть лучше должно быть O(log(n)), то есть второй варик. Правильно или нет?
467 1750158
>>749997
Да вопрос был для даунов, но я его не осилил: есть три таблицы.
В одной имена, во второй книги, в третьей взятые первыми книги. Нужно было быстро написать запрос таблицу только в общей схеме нарисовали, с чем я и не справился.
Хз, м.б. если бы у меня перед глазами были хотя бы таблицы, то я бы смог.
Писать нужно было в чате скайпа, а не в sql-е.
468 1750288
>>742948

>первую прочитай от корки до корки


Бесит огромное количество воды и самоповторов. Чувство такое, что Гарсиа этот специально зачем-то объём раздувал до тысячи страниц.
469 1750321
>>750158
мне кажется тут проблема что ты не знаешь ЧТО делать. Задачи тебе помогут понять КАК, а первое помгоет понять теория.
470 1750327
>>750021
хм, я бы попробовал циклом это решить. Навскидку можно потыкать через row number либо через курсор. Я конечно сам ещё тот погромист, но за твои конкаты я бы тебя обоссал на собеседовании.
471 1750400
Только что ошибся в WHERE и похерил 350 записей в БД... Хорошо ещё на прод не вышло...
Пожалейте меня, хочу вскрыться.
472 1750403
>>750021
СУКАБЛЯДЬ зачем нужен второй способ, если есть GROUP_CONCAT ?
ебаные собеседователи. Что они хотят этим добиться?

Не влезает результат? ТАк поди и почитай где эта настройка в mysql меняется. Ахуели вообще.
473 1750423
>>750400
Rollback?
474 1750430
>>750021
Ебучая задача, список в строку через запятую? Совсем охуели
475 1750432
>>750423
Оказывается, бекап был еженедельный...
476 1750434
>>750327
А за само задание - схлопывание таблицы с отношением в строку - не обоссал бы?
477 1750484
>>750400
у меня лид недавно проебался, часть записей проставлялась дата '0000-00-00', а он забыл про них и удалил старые записи вместе с ними.
478 1751055
>>750434
а что не так? функция есть. значит она кому-то нужна.
неудобно на клиенте делать group_concat
479 1751574
у меня горит с sql ex
это я тупой или задачи?
почему в таблице указывается имя, но в двух строчках указанны классы. Там в "проверочной" версии вопросов все так же?
480 1751610
Добрый вечер, ананасы, хочу как-то хранить статистику всяких событий на фронте в БД (клики, переходы и т.п.).
Думаю сделать столбцы event_type и event_date, адекватный ли это способ для хранения статистики, учитывая, что в день может быть порядка миллиона событий?
481 1751611
>>751610
БД постгрес, менять нельзя
482 1751622
>>751610
Нет, такие вещи не надо в постгре хранить, бери другое хранилище
483 1751624
>>751055
Для аналитики - может быть, но если ты занимаешься подобный в oltp- как будто что-то пошло не так
484 1751677
>>751610
Clickhouse
485 1751679
Аноны, есть одна постгрес БД продовская, хочу для тестирования и дев-сервера иметь ее копию, с возможностью обновления и докачки.
То есть, для тестов было бы отлично иметь возможность копаться в БД, удалять/обновлять/писать новые данные, для ДЕВовского сервера тоже самое, но что бы раз в какой-то период времени моя копия получала "обновления" с прода и данные в ней жёстко перезаписывались на новые.

Есть для этого что-то готовое или проще написать самому такую штуку?
486 1751722
>>751610
Лол. У мамкиных архитекторов сработала нейросеть : клики - значит clickhouse.

Миллионы байтиков в день - это ведь не так много.
Остоновись. Подумой.
487 1751723
>>751679
Просто пишешь раз в пару недель админу в аську : Василий, нам бы базу в дев залить дамп прода.
488 1751816
>>751723

>в аську


Дед, проснись, ты серишь!
489 1751918
>>751722
Единственный верный вариант решения данной проблемы. Сейчас бы аналитику складывать в медленные постгрес, который ни в кластеризацию ни в шардинг не умеет. Я еще не говорю про медленные запросы и жор ресурсов (в том числе дискового пространства). Если у тебя какой-нибудь заурядный круд для односельчан, то можешь брать реляционную СУБД. А когда тебе нужно хранить аналитику и делать хитрые запросы, которые будет отрабатывать моментально, то тут нужно уже думать и выбирать более совершенные решения.
Хотя, если ты считаешь, что сотни миллисекунд на простые запросы это норма, а отсутствие шардинга, распределенных запросов и кластеризации в 2к20 является обыденностью, то ок, можешь дальше пихать своего слона в проекты.
490 1751930
>>751918
Слон в детстве укусил?
Для кликов точно не стоит городить своё, когда уже есть специализированные и проверенные решения с готовой обвязкой. Для большинства проектов pg достаточно.
491 1751962
>>751677
Да еластики хватит за глаза
492 1751967
>>751918
Абсолютно верно, нахуя тащить реляционку со всеми ее нормальными формами, ролбаками и транзакциями чтобы просто хранить, никогда не менять, читать и агрегировать ссаные логи?
493 1751984
>>751723
Хотел бы автоматизировать процесс и не трогать никого.
Я тут и одмин и разработчик и автоматические тесты пишу.
494 1751993
>>751967
Ты просто не понимаешь как устроен тот же кликхауз. Твой предел это пилить круды на похапе и мускуле, лол.
495 1752054
>>751993
нет никакого потолка и линейного развития.

Может это мой стартап и я деньги на пидорасов-программистов не хочу тратить? У тебя свои ориентиры, а у меня свои. Ты можешь целиться в свой Яндекс, но мне это не надо.

Если я понимаю, что данные за 10 лет уместятся в арендованный сервер 3 Тб сервер, а чтобы агрегация происходила быстро, нужно просто это делать заранее и регулярно, нахера мне Кликхаус?
496 1752062
>>751984
Не, ну любая репликация только добавит тебе регулярных проблем.
Девопс - добавит ебических проблем.

Чем тебя не устраивает написать скриптец для дампа и закачки?
Можешь даже как-то разбить таблицы на части и вручную добавить условия к дампу, чтобы в наиболее объемных таблицах старые данные не дампились.

В свете этого, почему бы не просить админа, пока он сам не автоматизирует?
497 1752118
>>752054

>данные за 10 лет


>3 Тб


Лол, ну как я и сказал - круд для односельчан.
498 1752332
Воркбэнч лучшая тулза для работы с БД? Еще Dbeaver нраица, че выбрать?
499 1752334
>>752332
Ещё есть DataGrip и TOAD
500 1752342
>>752334
Так а что аноны рекомендуют?
501 1752370
>>751993
Ты наркоман?
502 1752449
>>752332
ты ебанутый тормозной mysql workbench называешь "воркбенчем"?
тогда посмотри бесплатный (для России) mysql dbforge studio
503 1752511
>>752062
Я реплики раньше не делал, вот и спросил.
Видимо и правда сам напишу.
Я == одмен == разраб
изображение.png31 Кб, 265x300
504 1752634
Аноны у меня наитупейший вопрос.
Есть некая большая таблица, мне нужно исключить записи удовлетворяющие сразу двум условиям. Ну например где место = Jopa и цена in (20,30,40).
505 1752639
>>752634
Ну собственно говоря , будет ли работать?
where (место !=jopa and цена not in (20,30,40))
506 1752935
>>752449

>бесплатный (для России) mysql dbforge studio


Как его получить? На офсайте только триалка.
507 1752940
>>752639
Лол, а почему нет?
508 1752949
>>752449
А, он только для винды чтоле, ну блин.
509 1753071
Анончикс, подскажи пожалуйста, как можно в SQL достать данные из 1 ко многому зависимостей? вот есть таблица пользователи и таблица телефоны.
Как мне получить json подобный список
{user1:{phone1,phone2},user2:{phone4,phone6}}
Это средствами языка собрать сначала список всех пользователей (собрать для них их телефоны и объединить это в нужный) мне или sql сама может так сделать?
510 1753181
>>753071
Ты хочешь из плоской структуры (таблицы) получить иерархию ккстомного вида. Зачем? Это же вьюха, работа для ORM.
Делай джойны и мапь строки в память моделек
511 1753226
>>753181
Я пытаюсь разобраться и решил перепроверить свои догадки, что в sql это не сделать. Поскольку изучаю сам есть неуверенность в том что полностью понимаю и не пропускаю какой-то функционал, вот и переспросил у коллективного разума
Спасибо за ответ :)
512 1753374
>>753226
Ну смотри - ответ на запрос в реляционную базу это всегда набор строк, содержащий значения столбцов и/или их производных. Эти производные могут быть любыми - кастомные строки, цифры и так далее. Но это все равно будет набор строк.
Просто сделай join и дальше направляй результат в модель в ккком хочешь виде - посредством ORM или ручками
513 1753438
>>752940
хз, чот результат не похож не правду.

Образно:
-с фильтом НОТ(исключить) 1000 строк
-без фильтра 1500
-Берем реверс фильтр, без NOT 100 строк
514 1753471
Спрошу тут и в С# треде. Вопрос по code-first db migrations в С#.
Как вставить ручную SQL миграцию перед последней? Допусть можно пустую сгенерить через Add-Migration и потом вставить свой SQL код в Up и Down. А как ее впихнуть чтобы она перед последней автоматической выполнялась? Можно конечно файл переименовать чтобы таймстап изменить, но как-то криво.
изображение.png6 Кб, 348x145
515 1754007
Что покурить по Apache Nifi?
Там какие-то сакральные знания требуются, или бомжам с улицы зеленый свет?
516 1754747
>>754007
Сам-то как думаешь?
нужно знать все те системы, которые ты собрался интегрировать и ETL-ить.

Занятна штука. Расскажи кто тебя заставляет ее изучать?
Там есть интеграция питона и какие-нибудь простейшие модели машоба? текстовые преобразования характерные для датасаенса (они называют это NLP)?
517 1754788
Сталкиваюсь с БД впервые. Не понимаю, как всегда, самые азы.

Чем отличается роль от юзера? Как нужно распределять пользователей по базам данных? Как всё это должно быть связано с пользователями в Линукс? Почему не стоит работать с ролью postgres и зачем она тогда вообще нужна? Что НА ПРАКТИКЕ означают разные аттрибуты, наподобие суперюзера, админа и чем они отличаются друг от друга?

В книжках просто постулируется однозначно и объяснение идёт сразу дальше.

Попутно ещё такой вопрос: как внести человека в таблицу, дав ему при этом уникальный id? Как его вычислять?
518 1754880
>>754788

> Чем отличается роль от юзера?


Роль - это что-то вроде профессии внутри одной системы. Разным ролям можно делать только какие-то конкретные действия и нельзя делать ничего другого, просто из соображений безопасности. Ну и роли привязаны к конкретным юзерам (иногда их может быть больше одной). Например, юзер с ролью "двачер" может читать и писать посты, а юзер с ролью "моча" может делать всё то же + редактировать/удалять посты двачеров или банить двачеров.

> Как нужно распределять пользователей по базам данных?


Например, таблицы: юзеры, юзеры-роли, роли, роли-действия, действия.

> с пользователями в Линукс


Там примерно то же, но действия крутятся вокруг файлов, а роли называются группами. Но это просто аналогичная модель, связи с базами там нет.

> как внести человека в таблицу, дав ему при этом уникальный id? Как его вычислять?


Считай, что в базе для каждой таблицы хранится по отдельной переменной-счётчику и написана простенькая функция, которая при каждом добавлении в таблицу записи устанавливает её поле id равным следующему значению счётчика.
519 1755110
Вопрос к великим дба и около того:
Можете рассказать стори своих собесов, какие вопросы были вообще, и какие "каверзные"?(хотя каверзность это скорее относительно, но все ж)
Алсо, любая инфа по вкату на должность дба приветствуется.
ну и про вилки, если можно(мзл)

Мимо-вкатываюсь-ибо-заебало-сидеть-в-техподе-за-60к
520 1755238
>>754747
Ну пока не заставляют, есть несколько стульев на выбор Rest APi, Apach kafka,Apache nifi. Первые два стула очевидно для пограмистов, а судя по описанию nifi, там уже ближе к бд и скулю. NIfi точно будлет юзатся в связки с касандрой, ну и ещё возможно собирать всякие данные со сторонних систем, пока не знаю подробностей, но стул выбрать нужно.
ываываы.png951 Кб, 1920x1080
521 1755240
Добрый день уважаемы господа. Беда пришла откуда не ждали. Ток начал гуглить тему Sql и прошу помощи. есть база данных и нужно удалить все строки(из 117 таблиц ) где используется Proj_ID, хелп плиз . С меня лучи добра и + в карму
522 1755244
>>755240

Мне кажется самый быстрый способ получить списоквсех таблоиц, прогнать через pragma table_info(tablename), найти таблицы в которых есть твоё поле, и уже вручную сделать truncate'ы.

Что-то типо:

SELECT
ma.Name,
(SELECT name
from
pragma table_info(ma.name)
where name='Proj_ID'
)

from sqlite_master as ma

Так ты получишь списко таблиц где есть твоё поле.

Ну или вот так можно, чтоб сразу спсок запросов получить:

SELECT
ma.Name as Имя_Таблицы,
(SELECT name
from
pragma table_info(ma.name)
where name='Proj_ID'
) as Имя поля
,'Trincate table' +' '+ ma.Name as запрос

from sqlite_master as ma

Но у меня нет под рукой SQLite чтоб попробовать, но общий принцип такой.

Ну и у тебя ка-то мутно написано, тебе все строки из таблицы где есть столбец Proj_ID удалить(то что я описал выше)? Или тебе нужно удалить строки в которых заполнен Proj_ID?

Если второй вместо транкейта юзай:

delete from TABLENAME where Proj_ID is not NULL
522 1755244
>>755240

Мне кажется самый быстрый способ получить списоквсех таблоиц, прогнать через pragma table_info(tablename), найти таблицы в которых есть твоё поле, и уже вручную сделать truncate'ы.

Что-то типо:

SELECT
ma.Name,
(SELECT name
from
pragma table_info(ma.name)
where name='Proj_ID'
)

from sqlite_master as ma

Так ты получишь списко таблиц где есть твоё поле.

Ну или вот так можно, чтоб сразу спсок запросов получить:

SELECT
ma.Name as Имя_Таблицы,
(SELECT name
from
pragma table_info(ma.name)
where name='Proj_ID'
) as Имя поля
,'Trincate table' +' '+ ma.Name as запрос

from sqlite_master as ma

Но у меня нет под рукой SQLite чтоб попробовать, но общий принцип такой.

Ну и у тебя ка-то мутно написано, тебе все строки из таблицы где есть столбец Proj_ID удалить(то что я описал выше)? Или тебе нужно удалить строки в которых заполнен Proj_ID?

Если второй вместо транкейта юзай:

delete from TABLENAME where Proj_ID is not NULL
523 1755512
>>755110
Половина разрабов джоин написать не может.
Просто sql изучи.
524 1755527
>>755238
ойй найфайчик
если будут вопросы заходи https://t.me/nifiusers
525 1755868
Как быстро вставить 9000 записей в MS SQL Server? Раньше был такой код для SQLite:

> execute_command("BEGIN");


> for (int i = 0; i < 9000; ++i) execute_command("INSERT INTO...");


> execute_command("END");


Работало очень быстро. Сейчас пытаюсь тот же код вызвать в майкрософтовском SQL сервере — BEGIN и END отдельными командами он не воспринимает, и работает очень медленно — на то, что раньше требовало 5 минут требует множество часов.
Что делать? Использовать синтаксис мультивставки, генерируя многомегабайтовые SQL-запросы?
526 1756500
>>750288
Это ты ещё 100 лет одиночества не читал.
527 1756834
>>755868
Cтранно конечно. Попробуй через while
image.png123 Кб, 273x184
528 1757413
>>755868
Тем временем переехал на postgres, стало немного быстрее, но всё равно ппц тормозно. Сходу ничего не гуглится, а что гуглится я сделал (UNLOGGED таблицы).
>>756834
Я серьёзный вопрос задаю — как в шарповом интерфейсе отключить автокоммит, а ты тут остроумием блещешь.
530 1758772
>>755868
Ну так у тебя наверное коммит идет после каждой записи
Генерь не на каждый элемент как insert into, а сделай ее вначале и генерь список values значений которые в инстерте вставояешь, это будет быстрее.
На mssql еще гугли bulk insert, на постгресе тоже есть такая тема гугли copy
image.png8 Кб, 153x619
531 1759028
>>638710 (OP)
Я постепенно на работе вкатываюсь в SQL. Не могу понять, как в результате получить country_id напротив соответствующего столбца с количеством заказов:
SELECT COUNT(1) FROM `order` LEFT JOIN `country` ON `country`.`id` = `order`.`country_id` WHERE status_id IN (6,19,31) GROUP BY country_id
Подскажите, пожалуйста.
532 1759035
Анон, какую ачивку можно получить самостоятельно для рассмотрения резюме на должности работы с данными? подготовку датасетов или еще какие-то отчеты...
533 1759041
>>758287
>>758772
В общем, перенёс сервер СУБД на локальный сервер и теперь всё работает так же быстро, как и с SQLite.
Спасибо вам за помощь, няшки.
:3
534 1759274
>>759028
SELECT COUNT(country_id), country_id FROM `order` LEFT JOIN `country` ON `country`.`id` = `order`.`country_id` WHERE status_id IN (6,19,31) GROUP BY country_id
image.png950 Кб, 1280x960
535 1761592
>>638710 (OP)
Подскажи, как решать такую задачу?
Мне кажется, или тут действительно нужно пилить процедуру с if-условиями?
536 1761617
>>761592

> Мне кажется, или тут действительно нужно пилить процедуру с if-условиями?


Нет.
537 1761627
>>761617
А как ещё можно задать условие "если в результате селекта не найдено 2 значнения, то пишем null?"
538 1761861
>>759274
Спасибо, завтра попробую
539 1762173
Сап мейлач. Нужно вычесть строки в одной таблице по признаку. Как это сделать и насрать в штаны с производительностью?

Что-то вроде:

Дата - ID - Категория - Цена

Мне соответсвенно нужно вычесть все товары категории А из Товаров Категории Б, по датам.

Ну например 2020.01.01 продали 3 из категориии А и 5 из катеогррии Б, мне нужно получить строчку 5-4.
2020.01.01 - 2
изображение.png101 Кб, 1186x1046
540 1762179
>>761592

with govno
as
(
select
salary,
rank over (order by price DESC) rnk
from salary
)

SELECT
coalesce(NULL,salary) as SecondHighestSalary
from govno
where rnk=2
541 1762180
>>762179
*RANK() OVER(ORDER BY salary DESC) as rnk
542 1763752
Двач я программист.
На работе есть postgres и mssql.
Как вообще вкатиться не только в sql, но и в БД в целом. Посоветуй пожалуйста минимум для программиста бэка. Разработчиком БД я становиться не собираюсь, но хочу понимать что там вообще происходит. Может книга обзорная какая где все что нужно есть?
543 1763945
Аноны, как разложить событие по часам?
Безымянный30.png13 Кб, 1009x224
544 1764379
Почему у меня не завершается операция после создания триггера?
Почему в Worcbench не подсвечивается слово OLD
drop trigger if exists update_user;
DELIMITER $$
create trigger update_user after update on profiles
for each row
begin
update users set updated_at = now() where id = OLD.user_id;
end $$
DELIMITER ;
У меня есть подозрение, что оно вообще не работает.
Безымянный31.png18 Кб, 972x224
545 1764387
>>764379
Поправил пробелы.
546 1765337
>>755110
Никаких, по БД спрашивать особо нечего.
- пример запроса с group by
- пример с join left и inner
- с having
- с CTE
- что такое индексы и нахуя, cons and props
- partitions
- connections
547 1765338
>>765337Триггеры и процедуры почти никто не юзает
548 1765357
>>765337
Что за конекшенс?
549 1765691
>>765337

> connections


CONNECT BY что ли?
550 1765823
>>765338
в моих телекомах юзают. и то и тоно не я их пишу бля за большие деньги
>>765357
количество коннекций к бд, транзакции с которых она будет\может одновременно обрабатывать мб?
551 1765862
>>765823
Юзать их - бэд практис и расходится с принципами чистой архитектуры, например, впрочем иногда удобно конечно, от задачи
552 1766564
Пс, аноны, для постгресса с очень жирными таблицами (18 лямов+ для таблицы) запрос выборки в 2 секунды - это дофига?

Как вообще понять, какие метрики для потгресса нормальные?
Задачи MS SQL Server по расписанию 553 1766683
Привет, Аноны.

У меня вопрос по мелкософтовскому серверу относительных баз данных. Есть такой запрос: https://pastebin.com/3DUrsG5S
Почему у меня задачи в планировщике имеют статус Runnable - No? И видимо поэтому они хотят исполняться в заданное время.
В чём может быть затык?
1596555863818.jpg41 Кб, 500x500
554 1768454
Что не так с этим sql-tutorial, говорит в начале "вот тебе select from where, тебе задачки на sql-ex" переходишь, ну решил несколько, а следующие уже из этого же списка подсказывают что в них надо использовать явные операции соединения и предикаты, до которых ты естественно ещё не дошёл, т.к. сразу взял и открыл попрактиковаться т.к "ну а почему бы и нет?" раз уж их сразу предлагают в конце главы. Потом вообще в примере использует left join и case с примечанием "смотри одну из дальнейших глав чтобы узнать про case". http://www.sql-tutorial.ru/ru/book_using_null_in_search_conditions.html
Мне может вообще наоборот надо читать, с конца этот учебник, вдруг всё встанет на свои места? К самому sql-ex претензий нет но вот такая чехарда это что-то новое для меня.
555 1768543
>>766564
2 секунды много в любом случае, если только это не аналитический запрос с кучей джоинов, агрегатов, подзапросов и cte
556 1769333
Как живется разработчикам баз данных? Лучше чем в вебе или хуже? В последнее время все больше интересуюсь базами данных и решил узнать, чем живут разрабы бд.
Мимо php мидл
557 1770974
аноны, подскажите пожалуйста , в sql запросе если много объединений таблиц, в объединяемой таблице фильтровать по условию лучше сразу же, в строке с объединением?
Или быстрее запрос выполняется если данная фильтрация уже идет в блоке where?
IMG20200808012529.jpg221 Кб, 1080x1002
558 1771546
Пикрил курс хорош для вката в sql? Если есть лучше, на англ или русском буду очень благодарен
559 1771587
>>771546
Все это есть на ютубе абсолютно бесплатно, так же можно скачать книги, по ним тоже отлично учиться материал, есть сайты с практическими задачами и они тоже бесплатные, если тебе некуда деть деньги, дай их мне
560 1771614
>>770974
мне кажется разницы нет в производительности нет, сервер сам оптимизирует план запроса, а вот в выдаче могут быть различия.
561 1771671
>>771587
Да я знаю что он есть бесплатно, я хочу узнать есть ли курс лучше
562 1773631
>>770974
Оптимизатор поймёт и сведёт к единому фильтрацию в ON и WHERE но только в случае если они эквивалентны, что конечно же происходит не всегда, например left join, да
563 1773699
>>763752
Высоконагруженные приложения (клепманн).
Тебя интересуют вторая и третья глава - реляционные бд, документоориентированные бд, графовые бд, столбцовые бд.
564 1773701
>>773699
Также может заинтересуют 10 и 11 глава - пакетная обработка, mapreduce, потоки событий
565 1777275
Хули не перекатываетесь?
566 1777545
>>777275
Кто первый заговорил о перекате - тот и перекатывает.
help.PNG51 Кб, 707x379
567 1777703
>>638710 (OP)
Анон, я тупой и мне нужна твоя сила. ЛЮБАЯ ПОДСКАЗКА.
Есть таблица, где пишутся логи юзеров
действие-роль-имя-datetime
нужно в виде вьюхи представить эту таблицу по типу
9.00 18 августа - Иванов
9.00 18 августа - Петров
9.05 18 августа - Иванов
9.05 18 августа - Петров
9.05 18 августа - Сидоров
Где с шагом 5 минут будут имена тех, кто в это время был active(не совершил logout)
568 1777705
>>777703
Попробовать юзануть оконные функции. Или написать процедуру, которая будет бежать циклом по оригинальной таблице и подсчитывать то, что тебе нужно, а вьюха будет вызывать эту процедуру.
569 1777824
>>777703
Тхреад нам перекати, им подумаем над твоей задачей
изображение.png661 Кб, 512x453
570 1777883
>>777824
Я к слову кажется придумал один вариант рабочий
571 1778134
>>777883
Если бы я умел, то я бы сделал.
572 1778137
>>777883
>>778134
Давай ты мне её отдашь, а я научусь перекатывать треды и перекачу.
573 1778141
>>771587
А есть что то кроме sql ex?
574 1778147

> перекатывать треда


Сложна

> Написать MERGE с десятью джоинами и рекурсивными подзапросами


Изи.
575 1778239
>>777703
Таблица большая7
576 1778243
>>777703
Как насчёт добавить поле сессия ид?
577 1778244
578 1778246
>>778243
Есть, скрыл, там длинное поле захешированного идентификатора
>>778244
Ок, сейчас гляну только твою ссылку
579 1778261
>>778246
А хули ты тогда ебёш вола? Просто делаешь джоин по этому полю, и у тебя оджна строчка - это ссесия, с временем начала и временем конца. Если нужно по отрезкам порезать джоинишь к календарю, с нужными отрезками времени
580 1778284
>>778261
Да говорю же, тупой! Сказывается конец рабочей недели. Вот так как-то вышло, анон.
https://pastebin.com/nB19m7Es
Сейчас календарь еще таблицей накидаю, чтобы к нему джоинить, а то вьюха не переваривает чот переменные. И спасибо за помощь.
изображение.png63 Кб, 360x346
581 1779142
>>778137
>>778246
Опять анона наебали, каждый раз как первый раз
image.png19 Кб, 505x324
582 1779523
че за программы в которых пишется код? оракл микурософт что то там какая лучше? и чем они отличаются от допустим написания того же кода в VScode?
Чем сложно перекатить? И скопировать ОПпост отсюда
Так?
583 1780231
Антоши, есть кун 32 лвл, есть вышка по информационной безопасности, есть приличный стаж админства и понимание что меня это все заебало и я разочаровался в этой сфере, так вот, есть мысли вкатиться в разработчика БД. Есть скудные знания о БД и SQL после универа. Есть ли смысл идти в эту сферу? Есть ли варианты пойти куда то джуном с возможностью там же и подтянуть знания? Есть ли среди вас те кто перекатился в разработку БД из других сфер IT?
584 1780583
>>780231
перекатился из админки в аналитику. Я всегда знал что админка днище, но когда из неё ушёл до конца осознал какое.
585 1780648
>>780583

> перекатился


Вот и тред перекатишь.
586 1781169
>>780583
Как перекатывался? Сколько админил? Какой лвл?
изображение.png728 Кб, 700x466
587 1781267
Заебали перекатывать будете?

Предлагаю собрать стачечный комитет и не отвечать ньюфагам.
588 1781631
ПЕРЕКАТ
ПЕРЕКАТ
ПЕРЕКАТ
>>1781628 (OP)
>>1781628 (OP)
>>1781628 (OP)
Разработка веб-приложения для хранения и защиты БД 589 1836366
Гайз! Нид хелп, плз! Как юный пекус, не имеющий опыта в написании курсовых. Советов мне! В чём может быть научная новизна в приложении - аналога oracle?
Функционал веб-приложения реализуется через браузер, полностью поддерживает расширения CSS и полный набор HTML-тегов, а также отсутствует привязка к стандартной библиотеке. Обеспечена концепция детализации и перекрестная фильтрация. Встроен аппарат статистики и анализа данных, возможность построения 3D моделей. Обеспечена высокоуровневая защита данных через соответствие паттерну.
590 1851206
Ононы, поделитесь ссылочкой на сайт, где хранятся разные дампы БД с данными. Знаю по нейросетям такое есть, а есть ли для postgre?
591 1885371
>>638710 (OP)
Сап, аноны. Заранее прошу простить, если не по теме пишу, просто хз, куда ещё писать. Нужен человек, которых разбирается в PL\SQL

типа, есть задание, которое идёт вместо экзамена, а у меня нихуя не компилируется, ошибки в коде, а сам исправить не могу, ибо тупой

Это всё не бесплатно, конечно. Если есть тут умельцы-молодцы, то в ответе на пост пишите контакт в телеге
592 1887291
Помогите плз задачку решить с sql-ex.
Select(обучающий этап). Задача 125. Решаю на MS SQL Server

ЗАДАЧА
Данные о продаваемых моделях и ценах (из таблиц Laptop, PC и Printer) объединить в одну таблицу LPP и создать в ней порядковую нумерацию (id) без пропусков и дубликатов.
Считать, что модели внутри каждой из трёх таблиц упорядочены по возрастанию поля code. Единую нумерацию записей LPP сделать по следующему правилу: сначала идут первые модели из таблиц (Laptop, PC и Printer), потом последние модели, далее - вторые модели из таблиц, предпоследние и т.д.
При исчерпании моделей определенного типа, нумеровать только оставшиеся модели других типов.
Вывести: id, type, model и price. Тип модели type является строкой 'Laptop', 'PC' или 'Printer'.

МОЙ ЗАПРОС

with LPP as (select 'PC' as type, code, model, price
from PC
UNION ALL
select 'Laptop', code, model, price
from Laptop
UNION ALL
select 'Printer', code, model, price
from Printer), AA as (select row_number() over(order by code desc, type) down_sort,
row_number() over(order by code, type) up_sort, code, type, model, price
from LPP)

select down_sort, up_sort, type, model, price
from AA

Я короче сделал сортировку первый-второй-третий (up_sort) и последний-предпоследний (down_sort)
Но вот как сделать их чередование я хз. Так что либо помогите допилить мое решение, либо тупо скиньте свое, в любом случае поклон вам в ноги
592 1887291
Помогите плз задачку решить с sql-ex.
Select(обучающий этап). Задача 125. Решаю на MS SQL Server

ЗАДАЧА
Данные о продаваемых моделях и ценах (из таблиц Laptop, PC и Printer) объединить в одну таблицу LPP и создать в ней порядковую нумерацию (id) без пропусков и дубликатов.
Считать, что модели внутри каждой из трёх таблиц упорядочены по возрастанию поля code. Единую нумерацию записей LPP сделать по следующему правилу: сначала идут первые модели из таблиц (Laptop, PC и Printer), потом последние модели, далее - вторые модели из таблиц, предпоследние и т.д.
При исчерпании моделей определенного типа, нумеровать только оставшиеся модели других типов.
Вывести: id, type, model и price. Тип модели type является строкой 'Laptop', 'PC' или 'Printer'.

МОЙ ЗАПРОС

with LPP as (select 'PC' as type, code, model, price
from PC
UNION ALL
select 'Laptop', code, model, price
from Laptop
UNION ALL
select 'Printer', code, model, price
from Printer), AA as (select row_number() over(order by code desc, type) down_sort,
row_number() over(order by code, type) up_sort, code, type, model, price
from LPP)

select down_sort, up_sort, type, model, price
from AA

Я короче сделал сортировку первый-второй-третий (up_sort) и последний-предпоследний (down_sort)
Но вот как сделать их чередование я хз. Так что либо помогите допилить мое решение, либо тупо скиньте свое, в любом случае поклон вам в ноги
Тред утонул или удален.
Это копия, сохраненная 24 января 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски