Этого треда уже нет.
Это копия, сохраненная 22 мая 2020 года.

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

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

Поехали!

Старый: https://2ch.hk/pr/res/1502870.html (М)
2 1550940
И сразу вкачусь с вопросом к тестовому заданию, которое завалил:
Есть БД, есть хранимая процедура, которая принимает как входные данные две даты и группу товаров, а на выходе даёт выборку по продажам товаров этой группы за указанный период времени.
В задании последним пунктом стоит:
"Вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"
Что от меня хотели и как это нужно было сделать? Мозга как включить данную выборку в уже существующий скрипт мне не хватило.
3 1550960
Есть таблица с данными. Нужно что-то наподобие тэгов/меток.
Как это сделать? Отдельными столбцами? Или есть ещё варианты?
4 1550964
>>550960
Индексы, не?
5 1550974
>>550964
Тэги нужны к каждой записи. Они могут быть уникальнми, а могут быть одинаковыми.
6 1550992
>>550940
Я бы им сказал, что надо в ORM делать.
7 1551089
>>550960
Да просто, пилишь отдельный столбец. Если это для отслеживания изменений, то slow changing dimension.
8 1551093
>>550940
ХЗ, какая-то кривая формулировка могу только предположить что есть ещё один столбец который отвечает за ндс.
9 1551136
>>550940

Итак, что у нас есть?

Есть Магазин, что-то типа id, имя
Есть Группа_товаров, что-то типа id, имя
Есть Товар, что-то типа id, группа_товаров_id, имя
Есть какие-то Продажи, что-то типа id, день, магазин_id, товар_id, цена_с_ндс

SELECT Продажи.день, Магазин.имя, Группа_товаров.имя, SUM(Продажи.цена_с_ндс) FROM Продажи
JOIN Магазин ON Продажи.магазин_id = Магазин.id
JOIN Товар ON Продажи.товар_id = Товар.id
JOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.id
WHERE Продажи.день >= {ДАТА-1} AND Продажи.день <= {ДАТА-2} AND Группа_товаров.имя = {ИМЯ-ГР-ТОВ}
GROUP BY Продажи.день, Магазин.имя, Группа_товаров.имя

Надеюсь нигде не ошибся. Проверьте, обругайте, плиз.
DsMrnDLWoAAYA2V.png123 Кб, 309x407
10 1551177
>>551136
но это же не процедура
DBrar.jpg12,9 Мб, 2880x1728
11 1551179
>>551093
Да, разумеется есть отдельные поля "Продажа с НДС", "Продажа без НДС" и прочее.
>>551136
Мякотка в том, что выложить решение нужно в виде текста одной процедуры. То есть я так понял что в том же выводе инфы по продажам определённой группы товаров (или нескольких) за конкретный промежуток времени, а срез по магазину/группе товаров вроде как предполагает lifetime сумму по магазину/группе товаров, то есть where для этого запроса в основном селекте не будет работать.

Короче вот архив с дампом и заданием. Мне уже без надобности (только для общего развития и понимания где и насколько я дурак), но может кому будет интересно поковырять или на будущее как пример тестового задания (тут я ступил ибо знаний у меня не хватает - искал-то на интерна, а не джуниора).
Ответы на 1,2 и 3 могу скинуть или пообсуждать.
12 1551260
>>551136
Вот как-то так

CREATE PROCEDURE test @date_1 date,
@date_2 date,
@group_ varchar(10)
AS
SELECT Продажи.день, Магазин.имя, Группа_товаров.имя, SUM(Продажи.день\Продажи.ндс100) AS Доля.продаж.ндс
FROM Продажи
JOIN Магазин ON Продажи.магазин_id = Магазин.id
JOIN Товар ON Продажи.товар_id = Товар.id
JOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.id
WHERE Продажи.день BETWEEN date_1 and date_2
GROUP BY Продажи.день,Продажи.ндс Магазин.имя, Группа_товаров.имя
HAVING Группа_товаров.имя=group_
ORDER BY SUM(Продажи.день\Продажи.ндс
100)

EXECUTE test(date_1,date_2,group_)
13 1551262
>>551260
Блять спасибо АБУ, нахуярил мне своих сранных табуляций, первые четырё строчки пидор
14 1551264
>>551262
а ещё звёздочка в сумме проебалась. хотя не уверен что сумма вобще там нужна в таком виде, но похуй пляшем, суть я думаю понятна
15 1551269
Есть две таблицы:

main:
___________________
| PROD | LIST_ID |
--------------------------
| a | 3 |
--------------------------
| a | 4 |
--------------------------
| b | 1 |
--------------------------

list:
___________________
| ID | LIST_VAL |
---------------------------
| 1 | 11 |
---------------------------
| 2 | 22 |
---------------------------
| 3 | 33 |
---------------------------
| 4 | 44 |
---------------------------

Нужно взять все строки из list и соединить их с каждой строкой из main (по полям main.LIST_ID и list.ID) и получить следующее:

______________________________
| PROD | LIST_ID | LIST_VAL |
--------------------------------------
| a | 1 | null |
--------------------------------------
| a | 2 | null |
--------------------------------------
| a | 3 | 33 |
--------------------------------------
| a | 4 | 44 |
--------------------------------------
| b | 1 | 11 |
--------------------------------------
| b | 2 | null |
--------------------------------------
| b | 3 | null |
--------------------------------------
| b | 4 | null |
--------------------------------------

Пробовал LEFT JOIN, но так он не все строки дает (те что с null'ами не выдает)
15 1551269
Есть две таблицы:

main:
___________________
| PROD | LIST_ID |
--------------------------
| a | 3 |
--------------------------
| a | 4 |
--------------------------
| b | 1 |
--------------------------

list:
___________________
| ID | LIST_VAL |
---------------------------
| 1 | 11 |
---------------------------
| 2 | 22 |
---------------------------
| 3 | 33 |
---------------------------
| 4 | 44 |
---------------------------

Нужно взять все строки из list и соединить их с каждой строкой из main (по полям main.LIST_ID и list.ID) и получить следующее:

______________________________
| PROD | LIST_ID | LIST_VAL |
--------------------------------------
| a | 1 | null |
--------------------------------------
| a | 2 | null |
--------------------------------------
| a | 3 | 33 |
--------------------------------------
| a | 4 | 44 |
--------------------------------------
| b | 1 | 11 |
--------------------------------------
| b | 2 | null |
--------------------------------------
| b | 3 | null |
--------------------------------------
| b | 4 | null |
--------------------------------------

Пробовал LEFT JOIN, но так он не все строки дает (те что с null'ами не выдает)
16 1551272
>>551269
cross?
17 1551273
>>551269
при левом таблицы поменяй местами
18 1551294
>>551272
лишнего и дубли
>>551273
да эт понятно, но все равно null'ы не дает
19 1551347
>>551260
Процедура итак выводит данные о продажах, каждая строка выводит данные о продаже: дата, магазин (в контексте задания - Аптека), касса, наименование товара, количество, группа товара, цена с/без НДС, маржа etc и в конечном итоге сколько вместе с НДС было получено за эту продажу (продажа с НДС). Я так понял что требуется чтобы строка выводила ещё за компанию соотношение продажи с НДС с суммарной продажей с НДС за этот день; + соотношение с суммарной продажей в этом магазине; + соотношение с суммарной продажей по этой группе товаров.
Ок да, тут я ступил и не уточнил, поэтому два последних вывода (магазин и группа) могут трактоваться и как "за всё время" и, что более вероятно "за сегодня в этом магазине" и "за сегодня в этой группе товаров", но в таком случае первый вывод должен быть "за сегодня продажи с НДС всех групп товаров".
20 1551377
>>551269
У тебя в LIST_ID значения 2 нигде нет, а если брать ID, то таблица будет без null
21 1551381
>>551377

> У тебя в LIST_ID значения 2 нигде нет


Оно есть в list.ID, от него уже можно плясать
22 1551382
>>551377

> LIST_ID


Вместо LIST_ID в последней таблице (с результатом) можно записать просто ID (я неправильно столбец назвал)
23 1551393
>>551347

>вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"


> в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя



Ну хз, типо как то так, это для дня, по другим по аналогии.

CREATE PROCEDURE test @date_1 date,
@date_2 date,
@group_ varchar(10)
AS

SELECT Продажи.день, Магазин.имя, Группа_товаров.имя,
(SELECT Продажи.день\Продажи.ндс*100
FROM Продажи
WHERE Продажи.день= Продажи.Продажи.день) AS Доля.ндс.день

FROM Продажи
JOIN Магазин ON Продажи.магазин_id = Магазин.id
JOIN Товар ON Продажи.товар_id = Товар.id
JOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.id
WHERE Продажи.день BETWEEN date_1 and date_2

А может они хотели три таблицы имз процедуры, и груп бай по дню/магазину/группе. И к слову тут уже противоречие, они в процедуру отдают группу и просят по ней выборку, и тут же:

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


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

Но я б таких пидоров хитровыебаных нахуй слал, непонятно что они в задаче хотят, так это еще на минуточку вакансия начального уровня.
23 1551393
>>551347

>вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"


> в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя



Ну хз, типо как то так, это для дня, по другим по аналогии.

CREATE PROCEDURE test @date_1 date,
@date_2 date,
@group_ varchar(10)
AS

SELECT Продажи.день, Магазин.имя, Группа_товаров.имя,
(SELECT Продажи.день\Продажи.ндс*100
FROM Продажи
WHERE Продажи.день= Продажи.Продажи.день) AS Доля.ндс.день

FROM Продажи
JOIN Магазин ON Продажи.магазин_id = Магазин.id
JOIN Товар ON Продажи.товар_id = Товар.id
JOIN Группа_товаров ON Товар.группа_товаров_id = Группа_товаров.id
WHERE Продажи.день BETWEEN date_1 and date_2

А может они хотели три таблицы имз процедуры, и груп бай по дню/магазину/группе. И к слову тут уже противоречие, они в процедуру отдают группу и просят по ней выборку, и тут же:

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


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

Но я б таких пидоров хитровыебаных нахуй слал, непонятно что они в задаче хотят, так это еще на минуточку вакансия начального уровня.
24 1551396
>>551269
А как вообще может получится null, если все возможные значения list.ID(=main.LIST_ID) имеют соответствующее значение LIST_VAL?
25 1551442
>>551393
Сейчас специально на Adventure Work попробовал написать схожий запрос, и упёрся как раз в то о чём я говорил - либо делаем групировку по товарам, либо лепим подзапросами всю эту парашу с ндс. Т.е. либо 3 таблицы с тремя групировками, либо одна с групировкой по группе товаров, и с агрегациями в шапке.
Стикер191 Кб, 362x346
26 1551629
Как в Mysql посчитать count вместе с group by? Нужно именно количество строк в целом, group by использую чтобы удалить дубли при джоине.
27 1551631
>>551179
Только сейчас дошло, что это рарджпег
28 1551635
>>551629
count (*)?
29 1551636
>>551635
Только учти, что строки, содержащие null, тоже посчитает
30 1551643
>>550992

А в ответ тебе бы сказали "Ты охуел, петюнь, ради твоего сраного ООП головного мозга мы новый топовый 4 головый сервак на голдовых зеонах с 4 терабайтами оперативы покупать не будем, пшёл нахуй."

Потому как на ORM подобная бизнес-аналитика примерно в такие системки и выливается, поскольку ни на что сложнее крудов он не заточен.
31 1551645
итак давайте подумаем как сделать последовательность в монгоДБ, без function, и главное атомарное решение с без глюков если это выполняется в 100000000 потоков.

мои варианты (но они не атомарны)
1)
list.insert(i)
i.seq = getmax(i=> i.seq) +1
update(i)

2)
i.seq = list.IndexDocumentCount()
insert(i)
32 1551646
>>551643

Петр, что вы там кукарекаете? Облака, сервера немодно комерческую тайну у чужого дяди модна?

Вынуждены вас расстроить, но расчет НДС стоимостью машинного времени в примерно аналогичную сумму оного НДС нас тоже не устраивает, так что вы по прежнему идете нахуй.
33 1551648
>>551645

Вам же пидоркам челастым транзакции завезли в ваше говно, хули ноете?
34 1551652
>>551648
не работают на 2 типа
35 1551679
>>551635
Он считает count на группу, а мне нужно общее количество.
36 1551684
>>551679

В инлайн вьюху наверни.

select count (⋆) from (текст запроса)
37 1551687
>>551679
sum(count(*)) ?
Сильно не бейте
38 1551829
SELECT DISTINCT model
FROM max_price
WHERE price >= ALL (SELECT price FROM max_price)

Аноны, я чет не совсем понимаю как вот это работает

>= ALL


т.е. он сравнивает является ли price больше всех значений в таблице или равно наибольшему значению?
39 1551842
>>551629
Чтоб было TRUE нужно чтоб все значение таблицы были =>
40 1551867
>>551829
Выражение вернёт true если
price будет больше или равно всех значений в селекте
41 1552245
>>551679
Блядь, так засунь в Group By свой айдишник. Тогда количество групп у тебя ровняться количеству строк в таблице, не?
42 1552475
>>550921 (OP)

>-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания


>-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс


Прошу дать ответ.
43 1552553
>>552475
1. Её никто не написал либо кому-то потом было лень её копипастить?
2c82d1e3476d309263c82803a412d403.png228 Кб, 600x600
44 1552680
В обще есть такая таблица
Фамилия | Год |Зарплата
Иванов | 2017 | 5000
Иванов | 2018 | 10000
Петров | 2017 | 7000
Петров | 2018 | 6000
Сидоров | 2017 | 5000
Сидоров | 2018 | 6000
Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017? Я думал сделать джоин с самим собой, но таблица огромная, примерно на миллион записей(много годов), в общем даже с индексом по фамилии это пиздец долго происходит, можно ли как-нибудь через сделать подзапрос?
45 1552820
В вакансиях просят указать уровень владения sql.
Я умею писать процедуры в T-SQL, знаю как работают аналитические ф-ции, могу читать план запросов и немного их оптимизировать.
Какой у меня уровень?
46 1552821
>>552820

>В вакансиях


В вакансии*
47 1552825
>>552680
Нуборешение: заджоинить выборку по 2018 с выборкой по 2017 и вывести записи с нужным условием.
48 1552830
>>552680

>можно ли как-нибудь через сделать подзапрос?


Два цте по городу и фамилии
>>552825
Вот етот успел вперёд меня.

Но, я думаю, что тебе это не поможет.
49 1552832
>>552830

>городу


цте с гроуп бай по году и фамилии*
50 1552835
>>552820
Я тут на тренинги записался, по тамошним критериям:
Средний: хорошие теоретические знания, практические навыки
Продвинутый: отличные теоретические знания, практические навыки, опыт работы более 1 года
51 1552841
>>552830

>цте


А что это?

мимо
52 1552884
>>552830
>>552841
Если это Common Table Expressions, то уже нашёл и читаю, спасибо.
53 1552893
>>552884

>Common Table Expressions


Бля, чото тоже попробовал не пойму как сделать

WITH Salary_total (Фамилия,Зарплата_2017, Зарплата_2018) AS
(
SELECT Salary.[Фамилия],
(
SELECT Salary.[Зарплата]
WHERE Salary.[Фамилия]=[Фамилия] and YEAR(Salary.[Год])='2017'
),
(
SELECT Salary.[Зарплата]
WHERE Salary.[Фамилия]=[Фамилия] and YEAR(Salary.[Год])='2018')
FROM [dbo].[Salary])

SELECT*
FROM Salary_total
54 1552902
>>552893
У тебя хоть зарплата NULL, а у жабаскриптеров вообще undefined
55 1552962
>>552680

В качестве решения не подходит тот факт, что данные за эти года меняться не будут и их можно вынести в отдельные таблицы? Таблица зарплат за 2017. Таблица зарплат из 2018.
tom-kruz-mem-smeetsya.jpg39 Кб, 500x333
56 1552998
>>552962
Ну вынесешь ты, а толку? Чтобы сравнить нужно будет джоинить обратно
57 1553164
>>552680
Вот запрос без Cte:

select
t.last_name
from tbl t
where t.year in (2017, 2018)
group by t.last_name
having count(distinct t.year) = 2 -- гарантируем наличие зарплаты у сотрудника и в 2017, и в 2018 году
and max(case when t.year = 2018 then t.salary else 0 end) > max(case when t.year = 2017 then t.salary else 0 end)
58 1553168
Аноны, а какие есть способы горизонтального масштабирования RDMBS? Т. е., например, есть у меня SQL-база, и она уже слишком большая/медленная, а на железном уровне я не могу ни добавить места под базу, ни заменить SSD на более быстрый, но могу добавить новый сервак. Как с минимальными временными затратами выйти из такой ситуации? Считаем, что и база, и запросы уже оптимизированы по-максимуму.
59 1553169
>>553168
Бэкапишь базу и восстанавлиаешь ее на новом сервере.
60 1553185
>>553168
Mpp базы данных погугли. Если не брать готовые решения, то некоторые умельцы прикручивали шардирование к postgres. Быстро скорее всего ни как. Только если структура данных позволяет, можно архив отделить, историю, но это не совсем горизонтально. Кратко - суть шардирования, распределять данные в зависимости от значения по разным сервакам.
61 1553214
>>552998

Нет, ты подожди.

Допустим, у тебя есть таблица с зарплатами, там 10000 сотрудников (народ приходит и уходит) за 20 лет, в каждому году 12 месяцев, каждый месяц начисляют зп 2 раза (аванс + основа) = итого 10000 20 12 2 = не более 4 800 000 записей. Если это джойнить, то будет просто ахтунг.

Ты берёшь и выносишь зарплаты за 2017 в таблицу ЗП2017, а зарплаты за 2018 в таблицу ЗП2018. Теперь у тебя базе данных нет необходимости вычислять значение выражения для джойна для всех вообще записей, а вычислять будет только для тех кто работал в 2017 и 2018. Допустим из фирмы в 2017 и 2018 никто не уходил и не приходил и там работало 1000 человек. 1000 человек
1 год 12 месяцев 2 раза в мес зп = 24000 записи в каждой таблице.

Затем, считаешь сколько у кого была зарплата в 2017 и 2018 году. Помещаешь эти данные в таблицы ЗПСУМ2017 и ЗПСУМ2018, соответственно. То есть у тебя в каждой из этих таблиц будет 1000 записей (по числу сотрудников).

И пишешь запрос
SELECT *
FROM ЗПСУМ2017
JOIN ЗПСУМ2018 ON ЗПСУМ2017.имя = ЗПСУМ2018.имя
WHERE ЗПСУМ2018.зп > ЗПСУМ2017.зп

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

Ну как вам такое, илоны маски?

Профессионалы, обоссыте если я хуеты написал, главно не бейте.
62 1553237
>>553214

Кончена разметка как бесит эта борда.
63 1553275
>>553164
а ты хорош
64 1553288
>>553214
Ну это говно и палки, куча лишних таблиц, куча лишних преобразований. А если у него доля записнй 2017-2018 высокая? Вон там выше анон изящный ответ зухярил
65 1553311
>>552680

>В обще есть такая таблица.


>Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017?


>в общем даже с индексом по фамилии это пиздец долго происходит.


Не знаю зачем, но я сделал зачем-то пример реализации вообще без движка базы данных.
Возвращается такой файл :

Фамилия | Год | Зарплата
Иванов | 2017 | 5000
Иванов | 2018 | 10000
Сидоров | 2017 | 5000
Сидоров | 2018 | 6000

Option Explicit
'Программа делает выборку из строки файла с таблицей (первый параметр функции "Выбрать")
'двух указанных лет (второй и четвёртый параметры функции), для которых зарплата либо
'увеличивалась, либо уменьшалась, либо не менялась (третий параметрй функции)
'и записывает результирующюю строку с выбранной таблицей в другой файл.

'Настройки :
'Путь к файлу исходной таблицы :
Private Const ПуФаIN As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Таблица.txt"
'Путь к файлу результирующей таблицы :
Private Const ПуФаOUT As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Результат.txt"
'Первый год для выборки :
Private Const Год_1 As String = "2017"
'Второй год для выборки :
Private Const Год_2 As String = "2018"
'Разделитель между записями :
Private Const RZ As String = vbCrLf
'Разделитель между полями :
Private Const RP As String = " | "
'-------------

Private Type Год 'структура таблицы определённого года
ZP As Long 'зарплата
LФ As Integer 'длина фамилии
Ф As String 'фамилия
End Type

Private Sub Command1_Click() 'Сделать выборку в файл
Dim A As String, nF As Integer

'Прочитать файл исходной таблицы в строку :
If Len(Dir(ПуФаIN, vbNormal)) Then 'если файл существует
nF = FreeFile 'присвоить идентификатору файла свободный номер
Open ПуФаIN For Binary Access Read As #nF 'открыть файл
A = Space(LOF(nF)): Get #nF, , A 'читать файл в строку
Close #nF 'закрыть файл
Else
Call MsgBox("Файл :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не найден."): End
End If
'-----------------------------------------------

'Получить строку файла с записями двух указанных лет :
A = Выбрать(A, Год_1, "<", Год_2)
If Len(A) = 0 Then 'если функция вернула пустую строку
Call MsgBox("Исходный файл повреждён."): End
End If
'-----------------------------------------------------------

'Записать результирующий файл таблицы с выбранными записями :
Dim B As String: B = Left(ПуФаOUT, InStrRev(ПуФаOUT, "\") - 1) 'директория файла назначения
If Len(Dir(B, vbDirectory)) Then 'если директория назначения существует
If Len(Dir(ПуФаOUT, vbNormal)) Then 'если файл уже существует
If FileLen(ПуФаOUT) > Len(A) Then 'если файл больше, чем длина записи
nF = FreeFile: Open ПуФаOUT For Output As #nF: Close #nF 'стереть файл
End If
End If
nF = FreeFile 'присвоить идентификатору файла свободный номер
Open ПуФаOUT For Binary Access Write As #nF 'открыть файл
Put #nF, , A 'записать строку в файл
Close #nF 'закрыть файл
Else
Call MsgBox("Директория :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не существует.")
End
End If
'----------------------------------------------------------------------

Call MsgBox("Выполнено."): End
End Sub

'Возвращает строку файла с записями двух лет :

Private Function Выбрать(Табл_IN As String, Год1 As String, Соотношение As String, Год2 As String) As String
'Табл_IN - строка, в которой записан исходный файл таблицы
'Соотношение(зарплат) - ">", "<", "=" между первым и вторым заданным годом

Dim Г17() As Год, Г18() As Год, LГ17 As Long, LГ18 As Long 'таблицы за 17 и 18 год
Dim A As String, mA() As String, LmA As Long, mB() As String, mD() As String, k As Long, g As Long, q As Long

'Разделить исходную таблицу на записи :
If InStr(Табл_IN, RZ) < 1 Then 'если в файле нет разделителя полей
Exit Function
End If
mA() = Split(Табл_IN, RZ): LmA = UBound(mA())
'-------------------------------------------

'Создать две таблицы за 1 и 2 год :
ReDim Г17(LmA) As Год: ReDim Г18(LmA) As Год
For k = 0 To LmA
If Len(mA(k)) Then 'для не пустых строк
If InStr(mA(k), RP) < 1 Then 'если в записи нет разделителя
Exit Function
End If
mB() = Split(mA(k), RP)
If UBound(mB()) < 2 Then 'если в записи отсутствует поле
Exit Function
End If
If mB(1) = Год1 Then
With Г17(LГ17): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ17 = LГ17 + 1
ElseIf mB(1) = Год2 Then
With Г18(LГ18): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ18 = LГ18 + 1
End If
End If
Next k
'------------------------------------

'Создать результирующую таблицу :
A = mA(0): ReDim mA(LГ17 + LГ18) As String: mA(0) = A 'записать "шапку"
LГ17 = LГ17 - 1: LГ18 = LГ18 - 1: ReDim Preserve Г17(LГ17) As Год: ReDim Preserve Г18(LГ18) As Год
ReDim mB(2) As String: ReDim mD(2) As String: mB(1) = Год1: mD(1) = Год2
If Соотношение = "<" Then 'если надо для увеличивающейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP < Г18(g).ZP Then 'если зарплата в 18 году больше, чем в 17
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
ElseIf Соотношение = ">" Then 'если надо для уменьшающейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP > Г18(g).ZP Then 'если зарплата в 18 году меньше, чем в 17
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
Else 'если надо для не изменившейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP = Г18(g).ZP Then 'если зарплата не менялась
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
End If
ReDim Preserve mA(q) As String: Выбрать = Join(mA(), RZ)
'------------------------------------
End Function
65 1553311
>>552680

>В обще есть такая таблица.


>Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017?


>в общем даже с индексом по фамилии это пиздец долго происходит.


Не знаю зачем, но я сделал зачем-то пример реализации вообще без движка базы данных.
Возвращается такой файл :

Фамилия | Год | Зарплата
Иванов | 2017 | 5000
Иванов | 2018 | 10000
Сидоров | 2017 | 5000
Сидоров | 2018 | 6000

Option Explicit
'Программа делает выборку из строки файла с таблицей (первый параметр функции "Выбрать")
'двух указанных лет (второй и четвёртый параметры функции), для которых зарплата либо
'увеличивалась, либо уменьшалась, либо не менялась (третий параметрй функции)
'и записывает результирующюю строку с выбранной таблицей в другой файл.

'Настройки :
'Путь к файлу исходной таблицы :
Private Const ПуФаIN As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Таблица.txt"
'Путь к файлу результирующей таблицы :
Private Const ПуФаOUT As String = "C:\Documents and Settings\Admin\Рабочий стол\Задачка на 2H\Результат.txt"
'Первый год для выборки :
Private Const Год_1 As String = "2017"
'Второй год для выборки :
Private Const Год_2 As String = "2018"
'Разделитель между записями :
Private Const RZ As String = vbCrLf
'Разделитель между полями :
Private Const RP As String = " | "
'-------------

Private Type Год 'структура таблицы определённого года
ZP As Long 'зарплата
LФ As Integer 'длина фамилии
Ф As String 'фамилия
End Type

Private Sub Command1_Click() 'Сделать выборку в файл
Dim A As String, nF As Integer

'Прочитать файл исходной таблицы в строку :
If Len(Dir(ПуФаIN, vbNormal)) Then 'если файл существует
nF = FreeFile 'присвоить идентификатору файла свободный номер
Open ПуФаIN For Binary Access Read As #nF 'открыть файл
A = Space(LOF(nF)): Get #nF, , A 'читать файл в строку
Close #nF 'закрыть файл
Else
Call MsgBox("Файл :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не найден."): End
End If
'-----------------------------------------------

'Получить строку файла с записями двух указанных лет :
A = Выбрать(A, Год_1, "<", Год_2)
If Len(A) = 0 Then 'если функция вернула пустую строку
Call MsgBox("Исходный файл повреждён."): End
End If
'-----------------------------------------------------------

'Записать результирующий файл таблицы с выбранными записями :
Dim B As String: B = Left(ПуФаOUT, InStrRev(ПуФаOUT, "\") - 1) 'директория файла назначения
If Len(Dir(B, vbDirectory)) Then 'если директория назначения существует
If Len(Dir(ПуФаOUT, vbNormal)) Then 'если файл уже существует
If FileLen(ПуФаOUT) > Len(A) Then 'если файл больше, чем длина записи
nF = FreeFile: Open ПуФаOUT For Output As #nF: Close #nF 'стереть файл
End If
End If
nF = FreeFile 'присвоить идентификатору файла свободный номер
Open ПуФаOUT For Binary Access Write As #nF 'открыть файл
Put #nF, , A 'записать строку в файл
Close #nF 'закрыть файл
Else
Call MsgBox("Директория :" & vbCrLf & vbCrLf & Chr(34) & ПуФаIN & Chr(34) & vbCrLf & vbCrLf & "не существует.")
End
End If
'----------------------------------------------------------------------

Call MsgBox("Выполнено."): End
End Sub

'Возвращает строку файла с записями двух лет :

Private Function Выбрать(Табл_IN As String, Год1 As String, Соотношение As String, Год2 As String) As String
'Табл_IN - строка, в которой записан исходный файл таблицы
'Соотношение(зарплат) - ">", "<", "=" между первым и вторым заданным годом

Dim Г17() As Год, Г18() As Год, LГ17 As Long, LГ18 As Long 'таблицы за 17 и 18 год
Dim A As String, mA() As String, LmA As Long, mB() As String, mD() As String, k As Long, g As Long, q As Long

'Разделить исходную таблицу на записи :
If InStr(Табл_IN, RZ) < 1 Then 'если в файле нет разделителя полей
Exit Function
End If
mA() = Split(Табл_IN, RZ): LmA = UBound(mA())
'-------------------------------------------

'Создать две таблицы за 1 и 2 год :
ReDim Г17(LmA) As Год: ReDim Г18(LmA) As Год
For k = 0 To LmA
If Len(mA(k)) Then 'для не пустых строк
If InStr(mA(k), RP) < 1 Then 'если в записи нет разделителя
Exit Function
End If
mB() = Split(mA(k), RP)
If UBound(mB()) < 2 Then 'если в записи отсутствует поле
Exit Function
End If
If mB(1) = Год1 Then
With Г17(LГ17): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ17 = LГ17 + 1
ElseIf mB(1) = Год2 Then
With Г18(LГ18): .LФ = Len(mB(0)): .Ф = mB(0): .ZP = CLng(mB(2)): End With: LГ18 = LГ18 + 1
End If
End If
Next k
'------------------------------------

'Создать результирующую таблицу :
A = mA(0): ReDim mA(LГ17 + LГ18) As String: mA(0) = A 'записать "шапку"
LГ17 = LГ17 - 1: LГ18 = LГ18 - 1: ReDim Preserve Г17(LГ17) As Год: ReDim Preserve Г18(LГ18) As Год
ReDim mB(2) As String: ReDim mD(2) As String: mB(1) = Год1: mD(1) = Год2
If Соотношение = "<" Then 'если надо для увеличивающейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP < Г18(g).ZP Then 'если зарплата в 18 году больше, чем в 17
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
ElseIf Соотношение = ">" Then 'если надо для уменьшающейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP > Г18(g).ZP Then 'если зарплата в 18 году меньше, чем в 17
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
Else 'если надо для не изменившейся зарплаты
For k = 0 To LГ17 'для каждой записи в таблице за 17 год
With Г17(k)
For g = 0 To LГ18 'перебрать все записи в таблице за 18 год
If .LФ = Г18(g).LФ Then 'если длина фамилии в таблицах совпала
If .Ф = Г18(g).Ф Then 'если и сама фамилия в таблицах совпала
Г18(g).LФ = 0 'отметить, что запись проверена(обнулить длину фамилии)
If .ZP = Г18(g).ZP Then 'если зарплата не менялась
'Сделать две записи(за 17 и 18 год) в результирующую таблицу :
mB(0) = .Ф: mB(2) = CStr(.ZP): mD(0) = Г18(g).Ф: mD(2) = CStr(Г18(g).ZP)
q = q + 1: mA(q) = Join(mB(), RP): q = q + 1: mA(q) = Join(mD(), RP)
'--------------------------------------------------------------------
Exit For 'другие записи в таблице 18 года не проверять
End If
End If
End If
Next g
End With
DoEvents 'передать управление другим процессам в системе
Next k
End If
ReDim Preserve mA(q) As String: Выбрать = Join(mA(), RZ)
'------------------------------------
End Function
Код на VB6.PNG237 Кб, 1077x3650
66 1553318
И рисунок. Хотя код отобразилося верно.
67 1553329
>>553311

Ебануться.

>>553288

Согласен, классное решение. Я про это >>553164 Ты тоже ведь?
68 1553356
>>553329
Да, не про пассаж от мамкиного программиста же
69 1553672
>>552835
Ты конкретизируй, мань.
70 1553765
>>553672
Средний у тебя уровень.
71 1553792
>>553765
Так у меня больше года опыта работы.
72 1553862
>>553792
Тогда есть опыт 3+ лет с минимум одним законченным крупным проектом с и использованием ключевых навыков?
73 1553876
>>553862
У меня есть опыт с твоей мамкой чё пристал зануда?
74 1553931
бамп
75 1554514
>>550921 (OP)
MS SQL
В таблицу добавил новое поле "Genre", оно не должно быть нуллом, но только в EDIT нет колонки Genre, что делать?
76 1554515
>>554514
Блять, я другие пикчи заливал
77 1554516
>>554515
>>554514
А, я дебс, видимо апдейт нужен
image.png8 Кб, 679x130
78 1554517
>>554516
Да, сори что заспамил.
Ну заодно спрошу, чё с вопросиками делать? Когда ручками пишу запросы, кодировка сломана
79 1554786
Кто нибудь брал специализацию на курсере по Data Warehousing? Стоит того?
80 1554834
>>554517
Collation поменять на кириллицу, если еще не поменял.

И инсертить в nvarchar-колонку надо не
'Говно',
А
N'Говно'
Screenshot20191224142051.png36 Кб, 623x317
81 1555303
Вот у меня например после джоина таблицы с самой собой такая хуйня вылезает, казалось бы сделать GROUP BY по имени чтобы убрать повторы, но тогда salary_2017 становится NULL, как сделать чтобы salary_2017 остался не нулл? Нагуглил GROUP BY COALESCE, но он все равно оставляет один NULL.
82 1555307
>>555303
Всем спасибо, хуйнул SUM в селекте, все норм стало. Нате трекич.
https://www.youtube.com/watch?v=U02mGktc7aA
83 1555316
>>554834

>Collation


Не нашёл где это, но с N'Говно' помогло! Спасибо, анончик ;3
84 1555358
>>555303
Покеж код, интересно посмотреть шо ты там строишь.
image.png53 Кб, 1149x678
85 1555495
Уникальные ID не надо делать? Вот как мне связь многим ко многим правильно тогда реализовать. Книги и покупатели. По какому общему признаку вообще можно их джойнить?
86 1555555
>>555495
У тебя ещё одной таблицы не хватает, с заказами, которое и сводит вместе покупателя и товар.
87 1555559
>>555555
Ну пиздец
изображение.png11 Кб, 784x722
88 1555562
89 1555567
>>555495
Для создания связи многие ко многим требуется дополнительная таблица.
90 1555578
>>555562
Ты геь взял,баран
91 1555584
>>555555
Ты гет взял.
Спасибо, а то я видимо неправильно связал, у меня была 3тья таблица, не понял чё с ней делать
92 1555609
>>555578
>>555584
Лол, не понял с начала и потом не понял. Ну раз у нас гет в тхреде, щас заживем, за неделю будем в бамплимит улетать.
Screenshot3.png39 Кб, 666x488
93 1555620
как эту ебаную подсказку в жабе включить?
заебало вручную прописывать это говно ебаное
94 1555625
>>555609
Я по такому случаю АдреналинРаш открыл
95 1555635
>>555625
Ууу, у меня от энергетиков изжога. Лучше уж колу купить
96 1555675
>>555635
Он не кислый совсем
97 1555955
>>555584
Ну смотри, чтобы связать список книг и список покупателей, тебе нужно как-то указать кто какие книги купил. Можно , конечно, в списке покупателей каждому покупателю добавить список книг которые он купил (и каждой книге - купивших её покупателей). Но несложно догадаться, что это не кошерно. Поэтому умные люди придумали делать таблицу, фиксирующую покупку - ид_покупки, ид_покупателя, ид_книг etc - и вот она связь многие ко многим посредством ещё одной таблицы.
Подробнее погугли «нормальные формы» вроде как
98 1557070
Как работает TOP?

Допустим у меня несортированая таблица, делаю простой селект с топом, что произойдет?
1) Достанет всю таблицу, и отдаст мне 10 строк
2) Посмотрит 10 строк, а остальное смотреть не будет
99 1557330
>>557070

А так ли это важно с учётом того, что в MySQL есть кеширование. Пока таблица, к которой ты делаешь запрос, не изменилась, ты будешь получать результат SELECT-а мгновенно из кеша.
100 1557389
>>557070
Вариант 2, разумеется
101 1557448
>>557070

>строк


Сжечь отступника на реляционном огне
102 1557461
Сап. Не нашёл треда по NoSQL, извиняйте.

Посоветуйте минимальную NoSQL-БД для докера с джава-клиентом, оптимизированную на быструю вставку огромного количества жсон-объектов размером около 1кб в минифицированном виде. Из операций требуются "взять N объектов" (не обязательно упорядоченно, но желательно самых старых) и "удалить N объектов по ключам".

Раньше был постгрес с хранением по столбцам, но чувствуется как оверкилл для микросервиса для приёма данных. И схему БД синхронизировать в нескольких местах сразу желания мало. Можно его, конечно, и жсоном кормить, но такое.

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

Или смотреть вообще в другую сторону, какие-нибудь timeseries-базы?
103 1557834
>>557461

МонгоДБ не подходит?

Алсо, если у тебя высокая нагрузка, может не менять базы, а использовать решения для балансировки нагрузки?
104 1558199
>>557461
Можно попробовать кафку как персистентное хранилище юзать.
Cassandra вроде как на запись быстрая, но не "минимальная"
105 1558237
>>557834
Суть именно в том, что один бэк совмещается с одной БД - нужен масштабируемый сервис-приёмник-данных. При увеличении нагрузки план в масштабировании всего сервиса, а не только базы. Монго - очень уж жирная, 150 МБ образ (alpine, видимо, для слабых), тонны коллекций, вот это всё. Редис привлекал именно свой минималистичностью.

>>557834
>>558199
Попробовал, всё же, постгрес с таблицей "id bigint, data json". Внезапно, производительность оказалась очень даже ничего, хотя и ощущается как тот ещё оверкилл (целый постгрес тянуть-то). С учётом дедлайнов придётся (по крайней мере, пока что) остановиться на таком решении. Не совсем понимаю, почему сборщик мусора не орёт из-за тонн сериализованных строк, но, видимо, lettuce - совсем ущербный клиент/драйвер.

В общем, вопрос пока что закрыт, но, в будущем, может открыться вновь.
106 1558256
>>558237

Нуок. Удачи тебе там, давай шоб всё заработало, потом допилишь.
изображение.png37 Кб, 686x714
107 1559284
Читал книжку, увидел такой вот жоин, слегка охуел
108 1559419
>>559284

> Читал книжку, увидел такой вот жоин, слегка охуел


Лол, это еще совсем хуйня.
109 1559513
>>559284
Конечно, ты охуел, это же говно какое-то. Еще и в книжке какой-то написано. Предлагаю такой вариант, который то же самое достанет, только записано короче и работает быстрее.
Select distinct
C.CustomerId,
c.CustFirstName,
c.CustLastName
From Orders o
Inner join Order_Details od on o.OrderNumber=od.OrderNumber
Inner join Products p on od.ProductNumber=p.ProductNumber
Inner join Customers c on o.CustomerId=c.CustomerId
Where p.ProductName in (‘govno’, ‘govno2’, ‘govno3’, ‘govno4’)
изображение.png398 Кб, 638x359
110 1559522
>>559419
Ну я дибиловат

>>559513

Нет твой запрос достанет клиентов купивших один из четырёх, а нужно клиента купившего все четыре
111 1560009
>>559284

Ну вроде бы реально так и получается.

Интересно, предложит кто-то вариант получше?
112 1560050
>>559522
Да пфф, прост не заметил, особо много не поменяется

Select
C.CustomerId,
c.CustFirstName,
c.CustLastName
From Orders o
Inner join Order_Details od on o.OrderNumber=od.OrderNumber
Inner join Products p on od.ProductNumber=p.ProductNumber
Inner join Customers c on o.CustomerId=c.CustomerId
Where p.ProductName in (‘govno’, ‘govno2’, ‘govno3’, ‘govno4’)
Group by
C.CustomerId,
c.CustFirstName,
c.CustLastName
Having count(distinct p.ProductName)=4
113 1560064
>>560050
А что поменялось то?
IN же же ОДИН ИЗ. У тебя по прежнему вернёт тех кто просто купил одно их говен. А надо вернуть тех кто купил все четыре говна за раз.

>>560009
Ну там в книжке есть ещё один вариант решения, покороче, и вроде как попроизводителней.
image.png24 Кб, 630x367
114 1560066
>>560050
Лучше сначала group by, чтобы join легче был.

>>560064

>А что поменялось то?


having, который оставляет только CustomerId с 4 разными ProductName.
115 1560071
>>560064
Хм да, впринципе разумно. Сначало хотел возразить что товаров то больше, но мы же их отфильтровали. блять а зачем эти пидоры тогда воротят это говно на три абзаца с жоинами
116 1560078
>>560071
Потому что having не использует индексы, так что может быть вопрос в производительности.
Но даже если нужно использовать индексы, то лучше юзать
Where exists
and exists
And exists
And exists
Для каждого из 4 продуктов, чем тот калл с джойнами. Советую сменить книжку.
117 1560079
>>560066

>лучше сначала


Двачую.
Я еще иногда пишу
Group by только по c.CustomerId
А все остальное запихиваю в max:
Select
C.CustomerId,
Max(c.CuatomerFirstName),
Max(c.CustomerLastName)
From ...
Group by c.CustomerId
118 1560081
>>560079
А за что конструкция MAX отвечает?
119 1560083
>>560081
Это просто агрегирующая функция, которую можно к строкам применять - максимум.
Можно min написать, результат такой же будет.
Она нужна, чтобы не группировать по имени и фамилии записи, они все равно по айдишнику клиента группируются.
960x540.jpg86 Кб, 640x360
120 1560084
>>560083
Не знал что так можно через групбай протаскивать дополнительные строки
image.png41 Кб, 933x249
121 1563202
Вот это ORACLE мощная.
Время в секундах среднее на различные count() в таблице от 0 до 10кк записей с шагом в 1к, (981 итерация)
122 1563384
>>563202
Я б посмотрел статистику по другим запросам. И вобще чот прохладная история, малоинформативно.
123 1563410
>>563202
маркетинг
124 1563431
>>563384
Да ладно, общеизвестнй факт, что оракл круче MS и My тем более.

Просто нужно иметь в виду, что она и дороже, и жрет больше, и сопровождается хуевее.
Я не фанат, между прочим, считаю говном оракл, но это известный факт, что он эти субд ебет в сраку, поэтому в банках всяких тока его и юзают.
monster-handyman.png3 Кб, 200x173
125 1563438
>>550921 (OP)
SQL?
А.может лучше Scylladb?
126 1563440
>>563431
Да я не против но от таблицы попахивает пиздежом, 0,001 на всех запросах, в то время как у конкурентов аремя разное. Либо там кэширование какое-то, либо условия разные.
Снимок.PNG39 Кб, 1310x558
127 1563451
>>563438

>Scylladb


Первый раз про такое слышу.
ПРедставим, что ты IT-директор и принимаешь решение использовать небесную-лабораторию-баз-данных. У тебя есть 2 чела, которые умеют ее админить и юзать.
Через месяц их хантят и зовут на другой проект, где обещают столько денег, сколько ты им никогда дать не сможешь.

Как быстро ты найдешь спеца по такой штуке?

Вообще, вижу, очень популярная штука, судя по пикрилу с hh, явно стоит того, чтобы потратить свое время на ее изучение.
128 1563467
>>563451
Она касандру заменяет.
130 1563473
>>563470
Ну типо каунт у них ахуенный да, ну вставляет хуже пеонов. Да и третей базой хотя бы марию нужно.
131 1563570
>>563202
ебани свой оракул в такой бенчмарк

https://tech.marksblogg.com/benchmarks.html

посмотрим, как он соснёт
132 1563603
>>563570

>data в csv-файлах


Ну вообще-то оракул силен, когда он сам сохраняет записи.
133 1563605
>>563570
Бенчмарк для колоночных бд
134 1563641
Макаки и индусы убили мой Myisam...
135 1563925
>>563605
а каунты фулсканом из
>>563202
для каких бд ёбта?

в обоих тестах каунты

У верхнего дебича еще сетап не указан. Что там и как, какие железки. У MS SQL колумн стор применён?

Вообще фул скан это чисто для аналитических бд. Макака выбрала какие-то дрищ базы устаревшие. Для таких задач используются движки из моей ссылки. А Оракул сосёт там. Это олтп база.
136 1563931
>>563603
в каких файлах, дебич?
он просто пример привёл размера в коммон формате

там если на любой тест тыкнуть, написано, как он данные в базу загружает
137 1563952
>>563925
>>563931
Тебе трипкод надо, чтобы все адекваты могли автоскрытие на твое говно поставить.
138 1564521
Где можно вот про эту хуйню почитать?

>NOT LIKE '%[^0-9]%'

139 1564523
>>564521
В этом условии, получается он не выведет записи, в которых есть что-то помимо цифр?
А это можно без отрицания сделать?
140 1564737
Ребятки, короче, пошел после универа на галеру, а тут вместо божественного MS SQL Server заставляют на PostgreSQL хуячить. И не то чтобы с этим проблемы, но блядь, я что-то не нашел где посмотреть диаграмку баз данных, а эта хуйня в БД с парой сотен таблиц очень выручала у SQL Server'а. Короче, может быть я тупой, но если этого нет из коробки, то как быстро получить эту самую диаграмму?
141 1564759
>>564523
Вобще все в один голос кричат что LIKE говно конструкция, и не стоит её использовать.
142 1564918
>>564737
В dbeaver.
143 1564933
>>564521
В документации к своей СУБД.
>>564523
Нет, все строки в которых есть подстрока [^0-9]
>>564759

> Вобще все в один голос кричат что LIKE говно конструкция


Что? Где?
144 1564940
>>564918
Спасибо. Вроде как то что надо.
145 1564953
>>564918
Он к Муське не подключается, потому что он написан на джаве, а там через jdbc он у нее не понимает timezone, надо в самой субд UTC+3 прописать, это можно несколькими способами сделать.
146 1564956
>>564933
ну слишком дорого по ресурсам, неоднократно слышал из разных источников
147 1564959
>>564956
Всё в этом мире относительно.
148 1564970
>>564959
Я слышал мнение что лайком любую более-менее большую базу можно поставить раком. К слову лучше использовать LEFT, вместо ^
149 1564972
>>564970
а не, со скобками по другому работает, забей
150 1565662
Дайте почитать о PSQL что-нибудь?
image.png168 Кб, 1279x742
151 1565808
Обосрался ли я в чём-либо, если да, то в чём?
152 1565833
>>565808
Запостил схему без задачи
Обосрался, ясное дело
153 1566023
>>565833
Ну может из очевидного что-то, типа FK не в ту сторону или тип text вместо какого-то более подходящего для строк с именами и названиями.
Я нуфак совсем, первую свою БД проектирую.
154 1566074
>>565808
Гендер булевым сделать можно
155 1566086
>>566074
В булев не поместится четыре варианта.
156 1566094
>>566086
енам ебашь
157 1567000
>>553164
Возник еще вопрос, если нужно вывести зарплату каждого за 2017 и 2018, и гарантировать что они были, что делать?
Вот я добавил group by t.last_name, year чтобы были оба, но тогда having count уже не срабатывает, и вылезают сотрудники которые скажем в 2018 уже NULL, как быть?
158 1567087
Видел что иногда используют ?, для подстановки, как правильно называется чтоб можно было почитать по этому вопросу?
159 1567135
>>565808
Ты в чем такую хуевину сделал?

Аноны, а не подскажете, Postgres много ресурсов системы жрет? (Винда)
160 1567141
>>567135
если просто в фоне тарахтит, то не много.
161 1567171
>>567141
А в каком случае много? Не много - в смысле даже меньше вкладки хрома какого-нибудь?
162 1567184
>>567171
да образные 100 метров оперативы. Много если начинаешь работать с базой делать боьлшие инсерты\селекты\итд.
163 1567194
>>567087

Где ты такое видел?
164 1567197
>>567194
В SSIS
165 1567202
166 1567880
Сап сиквелач. Хочу сделать запрос к таблице с полями, например, "имя студента", "concat("имя препода", "фамилия препода"), "название урока", "дата проведения" с GROUP BY date, name такой, чтобы если в это время урок случился всего один, то вывести его название, а если их несколько, то вывести строку типа "произошло несколько уроков". HAVING COUNT(date) не помогает, так как все остальные поля не попадают в агрегирующие функции. Если же сделать так, чтоб попадали, то запрос перестаёт работать
167 1567887
>>567880
Спасибо сосач, я решил эту проблему, сделав тупо SELECT name, MAX(prepod), MAX(urok), date ... GROUP BY date, name HAVING COUNT(urok) = 1 UNION SELECT name, MAX(prepod), 'penis', date ... GROUP BY date, name HAVING COUNT(urok) > 1
15415030182830.gif416 Кб, 600x429
168 1567891
>>567887
Няша, сам спросил, сам ответил, все бы так
image.png40 Кб, 1141x291
169 1568180
Здравствуйте, уважаемые.
Подскажите, хули так процессов Postgres'a много висит.
И че теперь pgAdmin только веб морда?
Десктоп приложением для винды не пользуется уже никто?
170 1568252
>>568180
В настройках можно задать ограничение на количество процессов.
171 1568269
>>568180

>И че теперь pgAdmin только веб морда?


Морда, которую мы заслужили. А вот нехуй было сливать индустрию обоссаным веб-дебилоперам, скоро клиенты всего только в виде вебморд будут.
172 1568290
>>568252
Не подскажешь как это можно сделать?
173 1568438
>>568180
>>568269
есть же вроде pgAdmin3 не как вебморда
174 1568506
А как сделать cross join the same table? columns k1, k2 in t1
k1 надо cross join k2
175 1568557
>>568506
Не надо отвечать, Я сделал.
вы бы все равно не ответили, уроды
176 1568978
>>567000
Select
*
From (
Select
t.last_name,
max(case when t.year = 2017 then t.salary else null end) as salary_2017,
max(case when t.year = 2018 then t.salary else null end) as salary_2018
From tbl t
Where t.year in (2017, 2018)
Group by t.last_name
) t
Where t.salary_2017 is not null and t.salary_2018 is not null
177 1569020
Накидайте каких-нибудь сложных задачек на оракл скуль или просто вопросиков, которые вас интересуют, с радостью отвечу. Акцентирую внимание на том, что я большой профессионал только в оракле, с остальными бд работал очень мало.
178 1569100
>>569020
В оракл все еще нейдобно работать с датами?
179 1570034
Аноны, в какой-нибудь субдпараше есть встроенный скалярный MAX() ? Чтобы сразу из коробки ебашить запросы типа select max(10,20,30;
180 1570096
>>570034
sqlite
181 1570138
Стыдно признаться, аноны, но я только сейчас узнал про SELECT ... FOR UPDATE

Ебаный стыд, я всегда думал что транзакция сама всё что надо залочит. Какой же я был тупой.

Умоляю, аноны, не повторяйте моей ошибки. Прежде чем написать BEGIN в своём скрипте, обязательно прочитайте это:

https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html

просто отложите все свои дела и прочитайте и только потом уже программируйте. Не будьте как я.
182 1570188
>>570138
Для белых людей ORM всё это делает за них, в коде пишется только `.update(status: :completed)`.
183 1570233
>>570138
Это ещё хуйня. Мне как-то и этого не хватило, пришлось обмазываться DBMS_LOCK.
184 1571711
А из mysql анонимного пользователя удалили чтоли?
Раньше же был, если в имени ''@'%' пустые кавычки указывать.
185 1571954
>>571711

В MariaDB при установке есть. Я удаляю каждый раз когда ставлю. Вместе с базой test.
7EA8F6D5-EA9A-4653-9B58-7CC000F41986.png2,5 Мб, 750x1334
186 1572383
Вот я попал

Живу в Москве

Знакомые зная Sql на уровне больших запросов (без кодинга) зарабатывают

120-150 на руки

Я же получал мало и решил сменить работу.
Вроде знаю Sql получше них и тут жопа, за 10 собесов все отказы,прошу всего 120.

В одних местах на 120к хотят знания select * from,
В других задание с пика.

То и то решаю, но отказы, че делать, хз
187 1572397
>>572383
А как этот запрос сделать?
188 1572420
>>572397
А как понять, что от тебя хотят в задании?
Я запрос мб и написал бы, но че-то в логику не въезжаю.
Если расскажете, напишу вам запрос.
189 1572426
>>572420
А понял
Select
Min(t.id) as min_id, max(t.id) as max_id
From (
Select
t, sum(t.is_chain) over (order by t.id) as group_num
From (
select
k.id,
Case when Lag(k.id) over (order by k.id) = k.id - 1 then 0 else 1 end as is_chain
From kall k
) t
) t
Group by group_num

Такие дела, это вам не сиськи мять
190 1572430
>>572426
Быстро ты

Если правильно, то ты молодец

Я сидел почти весь день с ним и не мог допереть

Твой метод попробую для себя разобрать, как доберусь до базы
191 1572718
>>572426

>Lag


>over


сложна
192 1572817
>>572383
>>572426

Для себя сделал вывод: плохо не знать хотя бы в теории какие есть в mysql функции и что они делают.
193 1572967
>>572383
Я что-то тоже втыкаю уже минуты три.
Что они хочет?

>максимальное и минимальное значение группы


Чего блять? Как это к примеру относится?
194 1573254
>>572967
Глупенький, там идут числа по порядку, но в некоторых местах порядок нарушается. Пока порядок не нарушен, это группа. Если после числа не идет следующее по порядку число, то он одиночка в своей собственной группе.
195 1573912
Есть две таблицы, writers (id) и books (writer_id, publication_year). Связь один-ко-многим. Столбец publication_year может содержать одно из 50 значений от 1970 до 2019. Как из этих данных узнать, сколько авторов издали свою первую книгу в каждом из обозначенных годов?
196 1573942
>>573912
SELECT writer_id, MIN(publication_year) FROM books GROUP BY writer_id;
197 1573954
Всем привет!
Анончики наверно не совсем по тематике, появилась необходимость автоматизировать работу, сменив эксельку на что то более гибкое.
с чего начать? где искать специалиста который занимается разработкой ПО, сколько это может стоить? ( усредненно)

Сейчас работаю в эксель +DataExpress, но знаний чтобы допилить и сделать все в одном месте не хватает.
198 1573969
>>573954
pandas
199 1573973
>>573954

> сменив эксельку на что то более гибкое.


с чего начать?
С изучения питончика.

> где искать специалиста который занимается разработкой ПО


На хх.ру. Или фл.ру.

> сколько это может стоить? ( усредненно)


100.
200 1573974
>>573973
я не планирую сам делать программу, просто нужно найти кого то умеет. на удаленную работу.
Спасибо попробую покурить сайты
201 1573979
>>573942
Ему не первый год для каждого автора, ему надо publication_year, count(writer_id) ... group by publication_year
202 1573993
>>572967
Ну так ты понял или нет?
203 1574006
>>573979
Тоже мимо.

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


Значит, надо
SELECT y, count(id) FROM (
SELECT writers.id, MIN(publication_year) as y
FROM books JOIN writers
ON books.writer_id = writers.id
GROUP BY writer_id
) b
GROUP BY y;
204 1574583
Это что-то по сисадминству?
205 1574612
>>574583
Это что-то по данным. Сисадмины этим не занимался, разве что если они ещё и DBA.
206 1575100
>>574583
Верстальщик, ты?
sage 207 1575437
>>550921 (OP)
Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гугле
sage 208 1575441
>>575437
Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гугле
Так более читаемо
209 1575452
>>575441
Историчность
sage 210 1575534
>>575452
ок, спс scd тип 4 не зашкварный?
211 1575601
>>575441
Пиздос, я всегда удаляю затираю данные редактированием, а в сервисах, написанных вот такими петухами, предыдущее значение навсегда останется.
212 1575618
>>575441
Ещё вариант "версионирование данных".
213 1575620
>>575601
Земля пухом.
214 1575628
>>575601
А когда дрочишь, сперму свою тоже пробуешь каждый раз?
215 1575634
>>575601

>Петухи пишут сервис


>Ой, кто там в системе поменял значение? Какое вчера было в системе?


>Сейчас посмотрю, скажу



>Сервис пишет мастер баз данных из /pr, который всех называет петухами и не соблюдает принципов историчности


>Ой, ГАЛЯ, кто там поменял значение? Какое вчера было в системе?


>Сейчас, надо восстановить бэкап базы, сейчас-сейчас, попредолимся пару часов, ой, ай, бэкап только на 23:00


>Жидко пернув, увольняется и идет искать новое место, где не будут предъявлять какие-то непонятные требования, типа ИСТОРИЧНОСТИ к его системам

216 1575662
>>575634
Нормальные люди пишут при необходимости хранить ИСТОРИЮ пихают логи изменений в какой-нибудь эластик, а не засирают этим говном базу.
217 1575739
>>575662
Ну конечно, нормальные люди только так и делают.
Ты в каждый проект еластик пихаешь? Дай угадаю, ты из тех, кто без еластика/докера/нод жс/монго и пр. работать не умеет, да?

Потом очень удобно все это поддерживать.

>а не засирают этим говном базу.


Бедненький, не можешь запрос написать, который последнюю строчку достает?

Вот здорово было бы, если бы в базе данных одна табличка была с одной колонкой и одной строчкой

База: DataDb
Таблица: Data
Колнока: Value
Тип данных - json

Ну ничего, научишься, там, глядишь, и на повышение пойдешь.
218 1575745
>>575739
Просто он ниасилил нормализацию.
219 1575782
Чем дата-саентист занимается?
220 1575787
>>575782
Анализом данных, больше всего это похоже на статистику. К базам данных отношение имеет лишь косвенное.
221 1575796
>>575787
А дата-инженер?
222 1575835
>>575796
И тем, и тем.
223 1576001
Парни, глупый вопрос, но будьте добры помочь. Требуется хранить файл и его хеши. Хэшей тысячи и не всегда (а может и часто для некоторых) их значение известно. Как лучше реализовать - одна общая таблица со всеми мысленными и немысленными хешами(и половина таблицы тупо null) или дохрена таблиц вида id -> hash_value, но уже без null?
Лучше на стыке расширяемости, скорости и более-менее несложности кода. Спасибо заранее.
224 1576004
>>576001
Их значение неизвестно*.
225 1576052
>>576001

>одна общая таблица со всеми мысленными и немысленными хешами


Ну давай разбирать по частям тобою написанное. Если твои хэши — это CRC32, то каждый из них занимает 32 бита, а возможных вариантов 232, т.е. пустая таблица всех значений займет 16 ГБ. Если же хэши, например, sha256, то каждый занимает 256 бит, а возможных вариантов 2256, тогда пустая таблица таких значений займет 70-значное число ГБ. Дисками уже закупился?
226 1576063
>>576052
Догичное объяснение, всё понятно. Удачи.
227 1576427
На сколько я знаю VARCHAR места не занимает, если в нем нет данных. Да и вообще любое поле не занимает места на диске, если оно NULL. Создатели движков БД не идиоты ведь.
228 1576458
гайз, что почитать по базам? опыт есть, но чувствуется то хромает теория
229 1577712
Здравствуйте, как реализовать стоимость по дням недели и праздникам ? Например,жилье на турбазе стоит 1000 р. по будням, в выходные 1500, на праздники другая цена. А если вообще не сезон скидку сделать.
230 1577957
>>577712

Я бы на твоем месте копнул в сторону как вообще реализуются скидки. Мне кажется это уже на столько заезженная тема, что по ней есть бест практики на любой вкус.
231 1578016
>>577712
id | name | workday_price | holiday_price | nebo_price | allah_price
232 1578043
>>578016
Ага, а завтра у тебя с понедельника по четверг стоит 100 р, в пятницу 150, а выхи 300, как будешь делать?
233 1578061
>>578043
Раз уж цена меняется по желанию левой пятки, то только так:
id | product_id | date | price

А на уровне логики каждый раз инсертить по несколько записей на будущее.
234 1578074
>>578061
Двачую, вот так правильно.
235 1578084
>>578061
ну смари цена будет 1488 руб с 01.01 по 12.01. и дичь получается
236 1578093
>>578084
Тогда можно сделать start_date и end_date.
Правда, вопрос в том, как сделать диапазоны непересекающимися. Можно написать тупой триггер, находящий самую близкую дату и чекающий, что всё норм.

Ещё вариант - только одно поле с датой, означающее "начиная с такой-то даты цена такая".
237 1578894
>>578093

>Начиная с какой даты


best вариант, обеспечивает и гибкость, и гарантирует, что не будет пересекающихся диапазонов.
C2400795-DC49-4A6D-B5EE-9F4265D68B9E.jpeg109 Кб, 984x1200
238 1579733
Братья-аноны, спасайте: где скачать пикрилейтед? В гугле не забанен, но найти не могу.
bt.png88 Кб, 962x844
239 1579794
>>579733

>найти не могу


Поищи в пикрелейте. Живые там ссылки проверять я конечно же не буду.
240 1580013
>>579794
Первая же ссылка рабочая. Лучи добра тебе, анон
241 1580220
>>575437
Таблица называется полносрезной.
Способ хранения - сырые не нормализованные данные. Есть куча способов, например ты можешь просто добавить столбец с датой загрузки, есть что-то похитрее. https://ru.wikipedia.org/wiki/Медленно_меняющиеся_измерения.
В основном об этом говорят, когда речь идёт о всяких больших данных
Но всё это довольно элементарно какие нахуй книжки, лол?
мимо инженер данных
243 1580266
>>580223
Инженер больших данных, у вас спойлеры фрагментировались по всем постам, срочно пересоберите свой текст.
244 1580278
давай те БД для файлов
что нужно
1) инсерт и гет по id
2) автобалансровка , типо заканчивается место , добавляю еще компьютер и всё само настраивается
3) поддержка стриминга , типо могу в вебе перематывать
245 1580279
>>580223

>какие нахуй книжки, лол?


какие нахуй книжки, лол?
Я уже сделаль тип 4 ну рили хуй нагуглишь
246 1580434
>>575662
Тебе могут быть нужны старые данные не только на случай когда надо что-то срочно посмотреть, а как часть бизнес-логики приложения.
247 1580435
>>580278
AWS S3.
248 1580498
>>580435
не нашел где скачать
249 1580892
>>580279
А ты не то чмо, которое инженеров больших данных свитерами называешь?
250 1581147
>>580892
я вкатывальщик еще не называю а надо?
251 1581910
Привет всем.
1)Итак нужна БД ключ значение подойдет
2) будет 1 таблица , инсерт и get по id
3) Любая скажите ? а хуй там вот такое требование
Нужна БД которое займет минимально диска.
Попробовал совета одного "топ программиста" монгоДБ , размер чуть ли не в 3 раза больше стал чем данные лежали в .txt
252 1581913
>>581910
Может, sqlite?
253 1581957
>>581910

>будет 1 таблица , инсерт и get по id


а чем собственно .txt файлы не устраивали? их можно гитом бэкапить, очень удобно
254 1581973
>>581957
getby id нельзя сделать , точнее нужно это делать моментально . писать код свой не хочу
>>581913
давай свои идентификаторы , если выйдет на х2 больше , чтобы мог тебя обосать
255 1581982
256 1581994
>>581973

>нужно это делать моментально


моментально это сколько мс? если у тебя данных не дохуища, а в пределах гига, создай раздел в оперативке (tmpfs) и храни этот файл там. скорость такая будет, что ты охуеешь. если хочешь, чтобы знакомые "топ программисты" не кекали от реализации, замени файл на memcached или redis. запомни главное: соединяться с хранилкой ты должен не по сети, а через сокет. преобразование данных в пакеты и обратно - это такой тупейшний оверхед, что остальное уже не имеет значения.
257 1582334
>>581982
шот гуглица только ктатащина , нету мануалов на не узбекском языке, и .тд.

>>581994
21 тб
дальше первого предложения не читал
258 1582434
>>582334
21 терабайт. В .txt.
А вы знаете толк, мсье.

Бтв любая база займет ощутимо больше места из-за организации хранения информации. Типа
259 1582444
>>582434
Последнее слово хуй пойми откуда взялось, сорян.
фикс
260 1582515
Привет, гайз.
У меня тут появилась нужда сделать так, чтобы при помощи SQL процедуры как-то на удалённой машине вызвать завершение определённого процесса в Windows (ну или хотя запустить скрипт уже на компе, который сам это сделает, не суть).

Но за часы гуглинга я так ничего и не нашёл, а мне очень надо доделать этот проект на работе.
261 1582521
>>582515
Тьфу, случайно отправил, не дописав.
Так вот, может есть какие-то возможные способы такое провернуть?
Или костыли?
Суть в том, что есть процедура, которая проводит некоторые проверки, и при условии, что некоторый параметр = true, то надо убить процесс на компе, который стриггерил процедуру.
Вот примерно так.
262 1582536
>>582334

>21 тб


в таком случае я предлагаю сделать по принципу "работает - не трогай"
263 1582635
>>582521
прямо голым SQL? ничего нельзя разворачивать дополнительно?
264 1582649
>>582635
А какое решение ты можешь предложить для развёртывания?
Смотри.
Есть комп, на котором триггерится прожка на С#, которая при определённых условиях блочит его полностью.
Я делаю решение, которое позволит ответственному человеку разблокировать комп, введя логин и пароль.

Проблема в том, как загасить процесс программы на С#, используя SQL и какие-то может быть костыли?
265 1582657
>>582649
Ну пускай твоя шарповная прога после блокировки компа начинает раз в пять секунд селектить табличку (например: id, user, time) и разблокировывать компутатор, а твой мальчик будет дергать процедуру, которая делает запись в эту табличку, права на нее дай только ему.
266 1582690
>>582334

> 21 тб



Сомневаюсь, что всеми этими данными пользуются каждый день. Наверняка их можно разбить по годам по разным базам и какие-то базы положить на ssd, а какие-то на обычные диски.
267 1582741
>>582690
каждый день. все данные задействованы
>>582434
понятное дело что займет более , в том и вопрос какая минимально
>>582536
незя, нужен поиск (читай начальный вопрос)
268 1582750
>>582649
Написать ты должен не прожку, а службу

Также советую гуглить Windows api Unlock Event .net
269 1582753
>>582741
Тогда делай свои индексы, раз тебе нужно минимум места и поиск реализовать.
Хотя можно попробовать покурить оракловые exteral table и их аналоги. Поиск есть, модификация данных есть, место займут только те табличные пространства, которые нужны для работы базы(относительно твоего объема - мизер).
Не та скорость, конечно, но твоим требованиям отвечает.

Как вообще такой монстр у тебя получился?
270 1582864
>>582741

>незя, нужен поиск (читай начальный вопрос)


полуркай технологии яндекса типа clickhouse, возможно решает эту задачу. алсо, в /s спрашивал?
271 1583475
У меня есть питоновский скрипт. Он циклом обрабатывает куски данных и базы данных монгодб. Скрипт делает одно и тоже. Разница лишь в том что в тестовой бд 8 дней данных а в полной бд полтора года. Но суть сортировки одинаковая.

На тестовой базе данных 8.5mb 100.000 строк
Время выполнения цикла меньше 1 секунды
На полной базе данных 215mb 2.5млн строк
Время выполнения почти 5 секунд

Почему такая разница и что мне сделать чтобы сократить время?

Я ньюфаг, просьба не ругайте.
272 1583528
>>583475

>на тесте мало строк


>на проде много


>что не так?



Всё так, хотя, ты скриптом обсчитываешь порции данных, а не весь набор разом, и у тебя хорошие диски и много оперативы, можешь в несколько потоков одновременно запускать свой скрипт на разные порции.
273 1583805
>>583528
Вот только я не пойму.
Он берет одинаковый кусок в обоих случаях. И в обоих случаях этот кусок находится в самом начале бд. А разница получается от 0.4 сек до 4.5сек. Хотя всё идентично. Я бы еде понял, если бы скорость выполнения возрастала к моменту продвижения от начала базы, дак нет, она с самого начала низкая становится.
274 1583824
>>583805
А, у тебя на одной порции данных скорость разная. Ты об этом не говорил.

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

Мб проблема в сети между тестом и продом, если они в разных местах находятся

Мб вообще запрос работает одинакого, а питонский скрипт по обработе - по разному. Посмотри, сколько выбор именно занимает.
275 1584042
>>583824
Эх, я же ньюфаня и ни одного твоего слова не понял.
Но я посидел и подумал.
Я делаю выборку по времени. И даю команду выбирать. И он выбирает, но пробегает по всей БД, проверяет все строки на соответствие моему запросу.
И если это так, то в чем преимущество баз данных? У меня получается как бы, какой-то построчный парсинг текстового файла.
И я думал что бд как раз существуют чтобы этого избегать.
276 1584046
>>584042
индексы
277 1584133
>>584042
У тебя БД - объектная - MongoDB, Она предназначена для того, чтобы доаставать данные по ключу. У тебя ключ - это день?
Ебаный рот, вообще, покажи код, которым ты из монги достаешь инфу, а то пока что все выглядит так, что ты ждешь какой-то магии, а ее не случается.

>Построчный парсинг текстового файла


Пока так и выглядит.
Help 278 1584200
Написать SQL запрос, который считает кол-во дублирующихся строк в любой таблице (строки считаются дублирующимися если для каждой колонки их значения равны, кол-во колонок мы не знаем, но скрипт должен отрабатывать на любой таблице). Запрос можно писать для любой СУБД на ваш выбор.
-------------------------------------------------------
Пацаны,спасайте,как так сделать?
279 1584210
>>584200
Переведи задание на английский и загугли. По первой ссылке будет ответ.
280 1584246
>>584210
Вижу там только поиск дубликатов по полям конкретной таблицы, это я и сам могу сделать. Но задача в том,чтобы это работало для любой таблицы. Или я в глаза ебусь и не вижу решения,ткни носом,пожалуйста
281 1584266
>>584200
Тебе надо оптимальный вариант или хоть какой-то?
select count(★) -
(select count (★) from
(select distinct ★ from table))
from table
Такое ебаклакство с подзапросом из-за того, что count(distinct ★), вроде, не работает. А если работает - так ещё проще: count(★) - count(distinct ★).
282 1584267
>>584266

> ★


Оригинально, возьму на заметку.
283 1584273
>>584266
спасибо за небезразличие , но ведь distinct * тоже не работает
1580153208993.jpg26 Кб, 648x150
284 1584397
>>584273
Значит, это фича оракла такая.
285 1584444
>>584200
Вот ответ для MS SQL сервер на основе метаданных и динамического sql. Нужно тока любую табличку записать в переменную

DECLARE @tbl_name sysname = 't_govno'
DECLARE @column_name NVARCHAR(MAX) = '';
SELECT
@column_name = @column_name + IIF(c.column_id = 1, '', ',') + c.name
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = @tbl_name;

DECLARE @sql NVARCHAR(MAX) =
N'
select sum(row_count) as total_row_count
from (
select
{column_names}, count(1) as row_count
from {tbl_name}
group by
{column_names}
having count(1) > 1
) t';
SET @sql = REPLACE(@sql, '{column_names}', @column_name);
SET @sql = REPLACE(@sql, '{tbl_name}', @tbl_name);
EXEC (@sql);
286 1584450
>>584200

MySQL

Если тебе нужно только КОЛИЧЕСТВО подсчитать, а не вывести их, то может быть так?

MariaDB []> SELECT * FROM t1 ORDER BY lol, kek;
+------+------+
| lol | kek |
+------+------+
| 1 | 2 |
| 1 | 2 |
| 1 | 2 |
| 1 | 3 |
| 1 | 3 |
| 1 | 4 |
+------+------+
6 rows in set (0.000 sec)

MariaDB []> SELECT `total`, `unique`, `total` - `unique` FROM (SELECT COUNT(★) as `total` from t1) q1 JOIN (SELECT COUNT(★) as `unique` FROM (SELECT DISTINCT ★ FROM t1) q2) q3;
+-------+--------+--------------------+
| total | unique | `total` - `unique` |
+-------+--------+--------------------+
| 6 | 3 | 3 |
+-------+--------+--------------------+
1 row in set (0.001 sec)
287 1584543
Суп sql'ач. Подскажи, существует ли в базах данных такая оптимизированная штука как "калькулируемое поле"?
Допустим, у меня есть объект "касса" в БД. У кассы должен быть баланс, но я не хочу его записывать как поле, т.к. его придётся поддерживать консистентным.

Баланс у кассы изменяется посредством "финансовых операций" у которых есть "сумма". Собственно, баланс кассы это общая сумма всех операций (например операция зачисления положительная, операция списания отрицательная). Вот и хочу узнать, может есть в БД (postgres) такая функция как какое-нибудь кэшируемое поле, или оптимизированное, автоматически рассчитываемое, т.к. каждый раз пробегаться и суммировать все операции чтобы узнать баланс мне кажется это плохой идеей. Вдруг операций будет сотни и тысячи
288 1584554
>>584543
Вьюху создавай для такого

Или функцию пиши, которая будет это вычислять
289 1584555
>>584543
Можно написать триггер, который видит, что обновляется колонка, и обновляет сумму. В постгресе трингеры есть. Даже в sqlite есть.
290 1584575
>>584554

> Вьюху


Пока не знаю, что это. Буду гуглить.

> Или функцию пиши, которая будет это вычислять


А это не будет эквивалентно обычной аннотации?
>>584555
А триггер это good practice?
291 1584589
>>584575
Вьюха - это по сути алиас для select-запроса, но некоторые вьюхи можно и апдейтить. Не знаю, как она поможет в твоём случае, всё равно её столбцы вычисляются в каждом запросе.

Триггеры/процедуры/функции - спорная практика, на самом деле, хоть так делают. В БД должны быть данные, а не логика. Но ради перформанса и консистентности приходится идти на некоторые жертвы.
292 1584593
>>584575
Нет, триггер - это не гуд прэктис.

Начнем с того, как ты хочешь получать данные, какую систему ты используешь?

У тебя база служит основой для OLTP-системы или ты строишь аналитику?
баланс нужно возвращать для одного аккаунта или для пачки?

Если OLTP-система, то тебе нужно показывать данные в режиме реального времени, что можно сделать при помощи вьюхи (ПРедставление(View)) или функции. Если ты правильно проиндексируешь табличку, то все будет быстро работать.

Если аналитика, то тебе нужно создать механизм для расчета этого баланса и укладки его в отдельную витрину-табличку раз вкакое-то время, например, раз в 1 час.
user_id, event_date, balance
Соответственно, не нужено перерассчитывать каждый раз табличку полностью, достаточно посмотреть, по каким челам у тебя появились новые данные и рассчитать новый баланс на новые даты по ним.

В общем, как обычно, ни хуя не написал, что как где вообще, а ждёшь помощи. Ни хуя так не будет.
Есть, вообще, такой ресурс stack over flow, на котором можно что угодно спрашивать, проблема только в том, что там есть репутация, и половина вопросов, которые аноны тут задают, была бы там заминусована в виду недостатка начальной инфы.

Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.
293 1584595
>>584593
Бля, чел, если бы тот анон знал столько же, сколько и ты, он бы не задавал таких вопросов.
294 1584596
>>584593
Еще добавлю, почему тригер - не гуд практис, потому что он будет давать базе неявную нагрузку, и однажды ты увидишь у себя блокировки и не сможешь ни хуя заинсертить, пока тригер не отработает.

Еще один варик - это просто иметь расчитанное значение баланса в кажой строчке проводки, например
1. 2020-01-01 Вася пупки новый сумма = 0, баланс = 0
2. 2020-01-02 Вася пупки пополнение счета сумма = 200, баланс = 0 + 200 = 200 (просто прибавляем к текущему начению баланса эти 200)
3. 2020-01-03 Вася пупки снятие со счета сумма = -100, баланс = 200 - 100 = 100
И т.п.
295 1584606
>>584543

>Допустим, у меня есть объект "касса" в БД. У кассы должен быть баланс, но я не хочу его записывать как поле, т.к. его придётся поддерживать консистентным.



Обычно в таких случаях UPDATE в принципе запрещен, а все изменения делаются с INSERT babos, reckord_id, familya_nakosyachvshego_pidorasa_slash_pyzdi.
296 1584612
>>584606
Прям представляю: дали студенту в шараге лабу по базам данных, а он на следующей паре приносит супер-энтерпрайз-хайлоад-систему на полляма строк, учитывающую вообще всё, включая кассовые символа.
297 1584618
>>584589

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


В общем это сильно похоже на аннотацию, только удобнее работать как с реальной колонкой в БД.

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

Количество таких "балансов" будет небольшим. Думаю в пределах десятков, даже не сотен.> Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.

> Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.


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

Спасибо, энивей.

>>584595
Двачую

>>584596
А это не дублирование данных? На первый взгляд не могу прикинуть какие профиты от такого подхода, ведь вместо этого можно записывать напрямую "баланс" в "кассе", а не в "операцию".

>>584606

> Обычно в таких случаях UPDATE в принципе запрещен


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

Баланс это всегда select sum(babos) group by account_id

Операции это всегда insert babos, account_id, прочая_мета_хуета into provodki, где babos может принимать как положительные, так и отрицательные значения.

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



Делаешь триггер на апдейт в котором всегда возникает ошибка.
299 1584691
>>584624

>Баланс это всегда select sum(babos) group by account_id



Чем это отличается от того, что я сказал про расчет баланса при инсерте каждой новой строчки с операцией?
300 1584720
>>584624
Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует.
301 1584733
>>584720

>>584596

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

>Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует.



Если поля, по которым ты группируешь индексированы , то нет.
303 1584741
>>584733
Спасибо, анончик, я видел. Просто наличие дополнительных полей обуславливает необходимость поддержания консистентности. А в случае если надо будет изменить одну операцию в прошлом (исправление ошибок, опечаток, что угодно) то в этом случае нужно будет пересчитывать все последующие записи. Я рассматривал такой подход, но только если колонка "баланс" была бы в самой таблице "касса". Тогда бы при создании новой "операции" нужно было бы только прибавить или отнять от текущего баланса. Вот я бы хотел этого избежать. Вообще я бы хотел избежать добавление доп. полей чтобы избежать добавления триггеров и обработку кейсов в коде.

>>584734
Ну что же, это я и хотел услышать. Можно даже view не создавать а обойтись аннотацией
304 1584842
Какую книгу по бд для собеса на бек посоветуете почитать? Learning SQL из закрепа?
305 1584865
Есть нормальные книги/видео/статьи по проектированию БД? Планирую пилить биллинговую систему, в которой будет очень много данных, но знания пока на уровне запросов в БД. А вот как сделоть нормальную релятивную базу, я пока не понимаю.
306 1584913
Сап БДач, у меня знакомый просит в отчёт по практике запилить БД:
5-8 несложных таблиц, заполнение, ключи/ограничения, по паре хранимых процедур/функций и триггеров, минорная работа с доступом пользователей и резервными копиями. Программа максимум: набросать простенькую форму для работы БД
Суть в том что:
1. Это не мой профиль, но в теории умею
2. Сделано должно быть через 17 часов.
3. Я не сильно горю желанием.
Сколько денег запросить?
307 1584925
>>584913
5 тыщ проси, если только структуру
А простенькую форму для работы с бд - это где, в аксесе, что ли? В пизду его шли с этим. Если не в аксесе, а в вебе - то это долго делать. В общем, не делай форму.
Screenshot 2020-01-28 at 21.42.28.png483 Кб, 1534x1638
308 1585038
>>584133
Вот кусок. Там дальше всякие махинации с этими данными. И рисование графиков по ним.
309 1585067
>>584624
Вы забываете про двойную проводку еще
Screenshot1.png58 Кб, 652x739
310 1585086
Аноны, расскажите почему моё решение неправильное. БД - SQL Server.
311 1585128
Анон, посоветуй.
Сейчас прохожу курс для начинающих по sql, там пока все просто селекты и прочее, запилился на курс ради строчки в резюме для аналитика но вроде мне это понравилось. Как дальше развиваться? Что с этим sql делать можно? Базы данных проектировать или просто запросы писать? Этот момент я упустил
312 1585137
>>585128
Если ты по базам данных угорать хочешь то это DBA - database administrator. Достаточно востребованная профессия. Правда у нас наверное не очень - их на галеры (наверное) мало набирают, если вообще набирают. А местных продуктовых контор не так много, ну и платят они (наверное) не очень, так с галерами конкуренции нет.
313 1585296
>>585128
Можно базы, можно запросы, можно админить(но это дно). Гугли sql аналитик.
314 1585301
315 1585310
>>585296
>>585137
Спасибо, аноны
скорее да, sql аналитик что-то такое
316 1585320
>>585086
1. Вангую, что процесс 2 будет ждать коммита, и только потом сможет прочитать, вообще это значение.
Задачка с подвохом типа, думаю что на собеседовании в условиях стресса решил бы, как ты
2 ты сам можешь провенрить это в скл сервере на примере
317 1585324
>>585320
да, сейчас сижу ковыряю сервер.
оказалось, что рид коммитед подвисает до момента коммита транзакции и в итоге и там, и там будет 1.
318 1585330
>>585324
вернее, в момент Т3 там будет неопределенное состояние, так как транзакция не выдаст результат, но в некий Т5 в процессе 2 появится единица.
319 1585339
>>585324
Чаво
Серьезно?
Это же полный пиздец, ждать завершения транзакции для чтения, что этот sql server себе позволяет?
320 1585350
>>585330
Ага, так правильно.

Транзакции - излюбленная тема для собеседовальщиков, очень они на нее дрочат.

Еще, бля,
чем отличается табличная переменная от временной таблицы

В общем ни хуя нового, дроч вопросы, как на егэ.

Вообще, думаю, что устроится на рараба/аналитика баз данных проще, чем сдать егэ по любому предмету.
1477507238142924790.jpg36 Кб, 374x600
Куда развиваться Oracle разработчику? 321 1585865
Третий год я разработчик БД. Начинал с разраба-аналитика отчётов в MS-SQL, далее прыгнул в мелкобанк. Работал в DWH Oracle, сейчас работаю в околопроцессинге, сопровождаю/разрабатываю функционал АБС. Работаю число с ораклом 11, 12, 18, 19 версий очень много разных баз. Пишу пакеты всякие, функции, колупаю индексы, партицирую таблы, делаю api для ява-разрабов и всякое такое. Стандартные задачи DBD в банке.

Куда дальше расти?

1) Задорочить яву/котлин со спрингом и ковырять дальше Ынтерпрайз уже пиля микросервисы.
+ работа всегда есть
+ джавистов всегда мало
+ штабильность
- могз ебет бизнес (хотя щас также)

2) Дальше пойти в Оракле
Развиваться в сеньеры/лиды дальше задрачивая DBD.
+ работа есть почти всегда
+ идти просто по накатанной
- порой пиздец скучна
- оракле начинают вытеснять другие базы

3) Идти в сторону универсального DBA+DBD.
Задрачивать Постгресы, Вертики, Терадаты и прочие МС-СиКуЭль. Можно быть дбд + дба.
+ знать много субд
- дба ещё более унылое чем в чистое дбд

4) Идти за мечтой и стать ДатаСиенце.
Задатки есть, знаю матан с универа, могу перемножить матрицы в питоне и знаю как строится перцептрон.
+ ЗП на порядок больше разрабов или дба
+ оч интересно
- большой риск остаться голодать

Что посоветуете? Есть 4 стула.
1477507238142924790.jpg36 Кб, 374x600
Куда развиваться Oracle разработчику? 321 1585865
Третий год я разработчик БД. Начинал с разраба-аналитика отчётов в MS-SQL, далее прыгнул в мелкобанк. Работал в DWH Oracle, сейчас работаю в околопроцессинге, сопровождаю/разрабатываю функционал АБС. Работаю число с ораклом 11, 12, 18, 19 версий очень много разных баз. Пишу пакеты всякие, функции, колупаю индексы, партицирую таблы, делаю api для ява-разрабов и всякое такое. Стандартные задачи DBD в банке.

Куда дальше расти?

1) Задорочить яву/котлин со спрингом и ковырять дальше Ынтерпрайз уже пиля микросервисы.
+ работа всегда есть
+ джавистов всегда мало
+ штабильность
- могз ебет бизнес (хотя щас также)

2) Дальше пойти в Оракле
Развиваться в сеньеры/лиды дальше задрачивая DBD.
+ работа есть почти всегда
+ идти просто по накатанной
- порой пиздец скучна
- оракле начинают вытеснять другие базы

3) Идти в сторону универсального DBA+DBD.
Задрачивать Постгресы, Вертики, Терадаты и прочие МС-СиКуЭль. Можно быть дбд + дба.
+ знать много субд
- дба ещё более унылое чем в чистое дбд

4) Идти за мечтой и стать ДатаСиенце.
Задатки есть, знаю матан с универа, могу перемножить матрицы в питоне и знаю как строится перцептрон.
+ ЗП на порядок больше разрабов или дба
+ оч интересно
- большой риск остаться голодать

Что посоветуете? Есть 4 стула.
322 1585932
>>585865
первый
323 1585936
>>585865
Дам банальный, но единственно верный, как мне кажется, совет - идти за мечтой.
Советую только сразу отбросить мысли о большой зп. В дата сайнсе даже после топового образования в шаде многие идут за 60к стажироваться в яндекс. Много получают звезды, стать которой можешь и ты вполне, если правда этим горишь, а не потому что навыдумывал себе хорошую зп.
324 1585944
>>585865
Знаешь ли ты математики, нужные для дс? Они вообще конечно не очень сложные, но поднимать с нуля тервер, матан, статистику и методы оптимизации может быть не так просто. Без них можно быть успешным конечно, но это не сильно отличается от проги обычной, даже в худшую сторону на мой взгляд. По перезапускаешь модельки с разными коэффициентами в поисках оптимальных. Нейронки чуть сложнее, но тоже не сильно отличаются по-моему. Ну и результаты твоей работы не видны сразу и оценить их непросто.
В любом случае, если текущая работа совсем не в каеф, меняй конечно. Дба точно минус, уныло же. Дальше в оркл кажется аналогично. Бекенд в принципе норм. Ещё можешь посмотреть в сторону дата инженера (по сути собираешь пайплайны для тех же мл-ей, не сильно отличается от работы с базами, но чуть веселее) или аналитиков, которые рисуют картинки в табло или чем-то аналогичном (опять же опыт работы с бд почти релевантный, + не надо учиться кодить)
изображение.png209 Кб, 803x374
325 1585981
Суть в чем, есть устройства, в поле записываются их номера
есть поломки на этих устройствах, в поле записываются их причины
нужно найти повторяющиеся причины поломки на устройстве
каким образом можно это найти, может есть какие то функции которые помогут сосчитать? я уже не знаю куда копать(
так же реквестирую годную литературу что можно почитать по postgresql

with

city_filial as (
select c1.city_name as city
, c1.city_id id
, case when c1.parent_city_id is null then c1.branch_name else c2.branch_name end as filial
from cep_city c1
left join cep_city c2 on c1.parent_city_id = c2.city_id
where c1.city_id not in (-1,0)

select filial
, count() as "Аварий"
, count(distinct net_address) as "Уникальных устройств"
, count(
) - count(distinct net_address) as "Повторных аварий"
, 100(count() - count(distinct net_address))::float/count(*) as value
from cep_accident_guts left join city_filial using (city)
where
start_time BETWEEN '2020-01-24T00:47:54.153Z' AND '2020-01-24T06:47:54.154Z'
and event_type in ('Причина поломки 1','Причина поломки 2','Причина поломки 3')
group by 1 order by 5 desc
326 1585982
>>585981
start_time - начало аварии
net_address - устройство
inc_reason - причина аварий
327 1585986
>>585932
Обоснуй

>>585936

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


Яндекс - клоака зловонная. ЗП там деймеингуют очереди из вайтишников. Плюс ебучая академия Яндекса которая набирает себе мясцо по ценам 2014 года. Джуны/мидлы получают там хуйню, особенно первые. Посоны ДС даже в нашем мелкобанке получали 100 как джуны, от 160 как мидлы.

>>585944

> Знаешь ли ты математики, нужные для дс? Они вообще конечно не очень сложные, но поднимать с нуля тервер, матан, статистику и методы оптимизации может быть не так просто.



Учился на математка. В универе 4 года назад это проходил. Думаю осилю. По задачам для выкатывания посмотрел там не очень сложно: СЛАУ, ДУ, производные, операции над матрицами, комбинаторика. Все знакомо.

> В любом случае, если текущая работа совсем не в каеф, меняй конечно.



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

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



Вот это гляну. Оттуда легче перекатится в DS.
328 1586042
Приветик всем в этом чатике.
Я совсем зеленый, но интересно стало.

Такой вопрос:
Можно ли задавать условия вывода?

К примеру:
SELECT id, name FROM table1 WHERE id>=2

Именно интересует этот момент: WHERE id>=2

Будет ли это работать и работать корректно? Выведутся ли мне результаты из таблицы с id от 2 и выше?
329 1586044
>>586042
Обосрался слегка.
Не SELECT, а SHOW.
330 1586108
>>585986

>Яндекс - клоака зловонная. ЗП там деймеингуют очереди из вайтишников. Плюс ебучая академия Яндекса которая набирает себе мясцо по ценам 2014 года. Джуны/мидлы получают там хуйню, особенно первые. Посоны ДС даже в нашем мелкобанке получали 100 как джуны, от 160 как мидлы.


Типично для славянских хуесосов, которые конкурируют исключительно демпингом.
331 1586266
Сап, ананасы. Хочу вкатится в базы данных, не посоветуете годный учебник по sql с практикумом? И если можно то и на Android, дабы обучаться на рабочем месте без особого палева
332 1586360
>>586266
На началах (если время позволяет) можешь в SoloLearn начать. Получишь немного теории, познакомишься с синтаксисом.

Знатоком и экспертом после курса в сололирн ты не станешь, это лишь самое начало.
333 1586391
>>586360
Уже в процессе. Но что дальше ботать? Плюс опять же нужна практика, пусть хоть и из примитивный заданий.
334 1586602
>>586391
братик, сейм щит, задрачиваю сейчас один курс, думаю дальше попробовать в развертывание/DBD но хз где материал брать
335 1587778
>>586042
Что за SHOW?
336 1587817
>>587778
Шоу бизнес.

Команда, чтоб показать таблицу, столбец, строку и тд.
337 1588981
SAP HANA жива еще?
338 1591292
>>588981
У нас тут тхреад умер, не то что твой сап.
339 1591294
>>591292
Ну так обсуждать СУБД - это не принт в цикле на питоне сделать.
340 1591943
Не подскажете, как можно пройтись по селекту вперед и назад?
Как в программировании: двигаться с концов массива в его центр
Решаю задачку с скл-ех 125, чет ваще никак
341 1591947
>>591943

> Как в программировании


Ну так буквально написать процедуру с циклом.
342 1591967
>>591943
Lag/lead, или курсор
343 1593002
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
15122909811850.jpg801 Кб, 1171x1495
344 1593871
помоги пожалуйста, анончик
Есть таблица table1(id, name)
где id является ключом. Поле name может повторяться.
Задача: написать один запрос, который удалит все дубликаты. Т.е. значения в колонке name станут уникальными, но множество, составленное из значений колонки name не должно изменится.
Если есть два кортежа (1, 'abc') и (77, 'abc') остаться может любой из них.
1579554418-3088f8a42a71ba8e0a8d97906b39e84b.jpeg73 Кб, 700x769
345 1593993
Великомудрые повелители БД, решил угореть по хардкору и написать складскую БД на Access_und_VBA, для учета стройматериалов на участке. Никак не вдуплю в алгоритм. Планирую мутить БД "Справочники" с таблицами по типам материалов и при поступлении на склад вносить в таблицу "Приход" с такими полями: id_материала (=id_материала_в_справочнике), дата поступления, кол-во, контрагент, номер накладной. И также заносить этот приход в таблицу "Склад", предварительно отыскав материал с подобным id и добавляя только количество. При выводе со склада ебашить в таблицу "Проеб" с датой, id, кол-вом, контрагентом и т.д. Я правильно мыслю или можно подобное замутить в одной таблице и я множу сущности?
346 1594087
>>593871
select
t.name
,min(t.id) as min_id
into temp_table
from "table1" t
group by name

truncate table "table1"
insert into table1 (id, name)
select id, name from temp_table
347 1594288
>>593993

>складскую БД на Access_und_VBA


Нафига, если рано или поздно придётся интегрироваться с какой-нибудь 1С-парашей. Бери сразу Odin-Ass.
348 1594293
>>594288

>интегрироваться с какой-нибудь 1С-парашей


Никто нам в прорабку, в чисто поле, не поставит 1С. Буквально пару прорабов и кладовщик будет кнопки жмакать. ну может еще сводные отчеты будет в ворд генерить и по почте отсылать.
349 1594298
SELCET ALL FROM HUI WHERE PIZDFAS A LASDKLGNFDLSK GHLDFGSKH MFGD,MGDFHH BJ;LDFSMGKL;DFG,H;LGFJHGL;SDF,GHGDСУККАААА ЗАЕБАЛО ЗАЕБАЛААА ЗЩАЕБАЛАААА
350 1594304
>>594298
А мне нравится)))
351 1594390
>>594304
Двачую. Вот многие ругают сикуль, а мне нравится прям.
352 1594484
Дайте адекватный туториал по JOIN'ам
Cпасибо.
353 1594952
>>594390
И я двачую.
Мне он видится таким логичным, в отличии от хаотичного css - жабаскрипта.

Удивляюсь, как многие фронтовики смогли выдрочить все эти ангуляры с реактами, на которых голову сломать можно, а простой понятный скл асилить не могут.
354 1595438
Суп БДач. Подскажи плез.

Использую postgres.

Я хочу создать виртуальную таблицу (view) что того чтобы хранить в ней "готовые рассчитываемые поля", чтобы каждый раз не прописывать их в запросах.

На пике изображено что я хочу. Есть чек, к чеку привязываются позиции. Сумма всего чека формируется из "суммы сумм" его позиций. Собственно я хочу, чтобы колонка "Чек.сумма" было виртуальным, а не физическим. В postgres есть функция виртуальных колонок, но она не позволяет обращаться к related объектам. Триггеры использовать пока не хочу.

Собственно вопрос:
Можно ли как-то связать таблицу и её отображение хотя бы какой-нибудь связью? Чтобы поле суммы было как можно ближе к записи "Чек"?
Screenshot20200208163224.png62 Кб, 1477x608
355 1595439
>>595438
Картинка отклеилась
356 1596095
>>595438
И зачем именно вьюху?
357 1596512
>>596095
А какие предложения лучше?
Я в принципе сделал, что хотел, и скажу что моя ошибка это размышление о БД терминами ORM. В итоге сам загнал себя в угол и искал несуществующие вещи.

Но если есть какое-нибудь решение лучше, буду рад выслушать.
358 1596535
Классический вопрос про букинг

Имеется аналог airbnb, люди ставят время, когда хата доступна для сдачи. Хата может быть недоступна не только потому, что её заняли, но и потому, что хозяин не хочет её выставлять сам живёт в данный момент в ней

Я замутил таблицу exposed_days, где хранятся дни, когда хата доступна (единственный минус (имхо) такой реализации - диск засирается)

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

Задача такова: выбрать свободные даты на ближайший месяц.

Реализация с ренджами:

Дни, когда хата доступна в принципе:
exposed_dates
daterange: daterange
home_id: int

Дни, когда хата занята:
reserved_dates
daterange: daterange
home_id: int
invite_id: int

Запрос, который ищет свободные даты:
SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) AS available_dates FROM exposed_dates
JOIN homes h ON exposed_dates.home_id = h.id
EXCEPT
SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) FROM reserved_dates
JOIN homes h ON reserved_dates.home_id = h.id

Уже для 100к записей он работает полсекунды. При этом я не могу пользоваться вычитанием ренджей, т.к. там DISJOINT ошибка - result of range difference would not be contiguous

Можно как-то улучшить этот запрос?

при реализации с отдельными днями сет из 100к свободных дней при таких же условиях отрабатывает за 70мс
358 1596535
Классический вопрос про букинг

Имеется аналог airbnb, люди ставят время, когда хата доступна для сдачи. Хата может быть недоступна не только потому, что её заняли, но и потому, что хозяин не хочет её выставлять сам живёт в данный момент в ней

Я замутил таблицу exposed_days, где хранятся дни, когда хата доступна (единственный минус (имхо) такой реализации - диск засирается)

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

Задача такова: выбрать свободные даты на ближайший месяц.

Реализация с ренджами:

Дни, когда хата доступна в принципе:
exposed_dates
daterange: daterange
home_id: int

Дни, когда хата занята:
reserved_dates
daterange: daterange
home_id: int
invite_id: int

Запрос, который ищет свободные даты:
SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) AS available_dates FROM exposed_dates
JOIN homes h ON exposed_dates.home_id = h.id
EXCEPT
SELECT h.id, generate_series(lower(daterange), upper(daterange), '1 day'::interval) FROM reserved_dates
JOIN homes h ON reserved_dates.home_id = h.id

Уже для 100к записей он работает полсекунды. При этом я не могу пользоваться вычитанием ренджей, т.к. там DISJOINT ошибка - result of range difference would not be contiguous

Можно как-то улучшить этот запрос?

при реализации с отдельными днями сет из 100к свободных дней при таких же условиях отрабатывает за 70мс
359 1597040
>>596535
Как минимум можно один раз join делать с homes. Потом в инете есть норм решения по "result of range difference would not be contiguous".
360 1597525
>>596535
Бред какой-то. Хранить нужно даты, и не exposed, а все вместе. У даты должен быть статус и опциональная связь с арендатором. Тогда можно для хозяина сразу рисовать календарь с именами в занятых клетках.
361 1597675
>>597525
Типа сделать связующую таблицу date_id host_id, где date_id ссылается на конкретную дату?
362 1598131
MySql боги помогите решить задачу.
- определить количество уникальных наименований .
- определить кол-во артикулов входящее в каждое из уникальных наименований.
- разделить прайс на группы с 01 по 99 по номеру артикула, где номер группы это 5 и 6й символы.
- определить кол-во артикулов в каждой из групп.
- определить кол-во уникальных наименований в каждой из групп.
- последние 2 пункта вывести в виде отчета: Группа, Кол-во артикулов, Кол-во уникальных наименований.

таблица вида:
Номер | Имя | Время |
z56 |Item1 | 11-12 |
x
33 | item2| 12-20 |
z26 |item1 | 01-25 |
h
33 |item2 |21-30 |
Безымянный.png5 Кб, 484x149
363 1598132
НУ ЧТО ЗА ПРЕКОЛ
364 1598150
>>598131
1. SELECT DISTINCT count(item )FROM t1 GROUP BY item
2. SELECT DISTINCT count(nomer) FROM t1 WHERE nomer = (SELECT DISTINCT count(item )FROM t1 GROUP BY item) GROUP BY nomer возможно ошибся в подзапросе
3 плохо формализована задача или я туп ХЫ
365 1598208
>>598150

>


>>598131
таблица уехала. должно быть так:
__Номер __|______ Имя __| Время |
z1234561234 |Item1 | 11-12 |
x1234331234 | item2| 12-20 |
z12342612 |item1 | 01-25 |
h123433123 |item2 |21-30 |
366 1598363
>>550921 (OP)
Сап господа

Есть warehouse (sql server) в виде star schema и два релейдет вопроса.

1.
Есть проблема с производительностью, так как у определенных компаний данных много (пару миллионов), следовательно запросы с тонной джоинов и предикатов длятся долго, индексы, где они имеют место, само собой присутствуют.
Денормализация не везде возможна и не сильно спасает
Что обычно в таких случаях делают?
Вопрос скорее с точки зрения любопытства, на практике я никаких инициатив пропихнуть не смогу

2.
Используется ORM, так что запросы в итоге делаются через sp_executesql
Что выливается в parameter sniffing и в просадки по производительности:
Почистили кэш, сделали запрос для мелкой компании, план запроса попал в кэш, делаем запрос для крупной компании - ловим timeout из-за того что используется неоптимальный план.
Какие выходы из этой ситуации?
На данный момент на каждый запрос в подобных местах стоит option recompile, но это определенно не выход.
367 1598773
>>598363

> Что обычно в таких случаях делают?


Используют teradata например вместо обычных субд?
368 1599084
Попросили перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бд. Решил собрать инфу по комплектующим компьютеров и застрял на структуре бд: я втупую могу каждой комплектующей выделить свою таблицу с ценой, названием и характеристиками, но тогда в ней не будет никаких связей а от меня ждут явно реляционную бд и это, как мне кажется, не самая лучшая практика.
369 1599135
>>551177
>>550940
Если это оракл, то тебе надо делать 2 типа данных уровня схемы. Один просто is object, а другой is table of. Процедуры не умеют возвращать значения в привычном виде, но могут через out параметр.

Параметры in - даты, группы товаров. На out - коллекция через bulk collect. Как правило так не делается, тем более это можно сделать через функцию. А если нельзя прокинуть предикат то юзается pipeline-функция.
370 1599235
>>597525
Если я правильно понял, то ты поддерживаешь реализацию, где хранятся отдельные дни.

Выставил с 10 по 20 - создается 10 записей с датами. Так?
371 1599250
>>599084

>перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бд



ты им хочешь таск закрыть?
372 1599253
>>550940

>Что от меня хотели



Чтобы ты им бесплатно выполнил задачу, долю продаж блять с НДС нахуй
373 1599815
Можно ли в postgres сделать кастомный тип со встроенной валидацией контрольной цифры, например, для ИНН?
374 1599822
>>599815
Ваще не вопрос. Гугли "create domain"
375 1601858
Сап.
Открыл для себя редгейт, понравилось, появилась зависимость. А потом у него кончилась двухнедельная триалка:(
Реквестирую советы как обойти его защиту, так как тулы топовейшие, а 1500 баксов в год платить не могу
376 1602222
>>601858
Мне тянка на новый год подарила RedGate AutoComplete Для SSMS.

Долго страдал, но бабок зажимал, в итоге она мне предложила в подарок, кек.

ПОДАРИЛИ ПРОГРАММУ.

На рутрекере есь старые версии, но они все убищные.

Кстати, раньше в redgate работал еще ключ
i need more time
Который еще на какое-то время давал с ним поработать.
377 1602605
>>602222
Да про ключ знаю, пробовал, уже не работает.
С ресетом триала не получается. Пробовал удалять, чистить руками реестр и все записи о редшейте и это не помогает. Он при установке разварачивает свой сервис на 22223 порту, а тот шлет на их серв полный конфиг системы и получает ответ что триалка на этой машине уже запускалась. В общем, судя по всему, оно сейчас не ломается
378 1603153
А если нужна дата на десять дней раньше последней, как писать запрос надо? max(date) - последняя - работает. SELECT DATE_SUB(max(dt),Interval 10 DAY) - уже нет
379 1603280
>>602605
Если он разваорчивает сервис, мб надо сервис стопнуть?
380 1603517
>>603153
Datediff
381 1603946
Ребят, помогите с MySQL (в какую сторону копать). Есть один проект, который работает на этой бд, и у меня некоторые траблы с ней. Сам сайт работает довольно быстро, т.е запросы, где происходит выборка или запись в бд происходит довольно быстро, но иногда эти же самые запросы отрабатывают нереально долго, что приходится перезагружать страницу. И суть в том, что если я перезагружу страницу, и выполню такой же запрос еще раз - он отработает быстро, так, как должно. В чем может быть проблема?
382 1603951
>>603946
Звучит как кеш.
383 1604007
>>603951
Начал копать сюда. Но никак не могу понять почему же все-таки он зависает, и почему он делает это не всегда.
384 1604731
>>603946
Профайлер запускай и выпаливай, что долго работает.
Что тут посоветовать еще.
Мб запрос и быстро отрабатывает, но его тчо-то лочит (незакрытая траза какая-нибудь)
А мб и долго, потому что оптимизатор mysql не может построить план, например.

Да до хуя причин есть, нет смысла их все перечислять без первичной диагностики, выпаливай запрос через профайлер, потом уже смотреть можно будет.
385 1604970
>>604731
Спасибо. Через processlist нашел блокирующий запрос.
386 1605561
Что следует читать после Learning SQL? Сборник рецептов или же нет? Есть ли общие рекомендации по литературе для вкатывания в sql вообще и в oracle? Какие книги следует прочитать для понимания er-моделей?
387 1605714
>>604970
И что, заработало?
image.png19 Кб, 419x320
388 1606658
Анон, есть основная таблица DOCUMENT, в которой хранятся разные типы документов. И есть связывающая таблица LINKEDDOC, которая хранит связи между документами.

Мне нужно найти документы типа t1, которые имеют связанный документ типа t2 и у которых не совпадает поле BRANCHID. Например на скрине это документ с ID=3, который связан с документом ID=6

Я написал говно#1:
select from DOCUMENT d
join LINKEDDOC ld on ld.DOCID = d.DOCID
where d.DOCTYPEID = t1
and d.BRANCHID not in
(select d1.BRANCHID from DOCUMENT d1
join LINKEDDOC ld1 on ld1.DOCID = d1.DOCID
where d1.DOCTYPEID = t2)

И говно#2:
select
from BASE_ORACLE.DOCUMENT d1
join LINKEDDOC ld1 on ld1.DOCID = d1.DOCID
join (select * from DOCUMENT d2
join LINKEDDOC ld2 on ld2.DOCID = d2.DOCID
where d2.DOCTYPEID = t2) d3
on d1.BRANCHID != d3.BRANCHID
where d1.DOCTYPEID = t1

Оба говна не работают. Халп!
389 1606766
>>606658

Мимо нюфаг написал говно:

select doc_h.Docid_h Docid_h, doc_h.Docid Docid, doc_h.globaldocid globdoc
from (select d.docid Docid_h, ld.docid Docid, d.branchid branchid, d.doctypeid doctypeid
from documet d join linceddoc ld
on d.globaldocid=ld.globaldocid
where d.doctypeid = 't1') doc_h join document d
on doc_h.Docid=d.docid
where doc_h.branchid!=d.branchid

Это вообще и не сработает наверное.
390 1606806
>>606766
А что за поле Docid_h?
391 1606813
>>606806
Первый docid в котором id главного документа.
Там подзапрос возвращает таблицу в которой два столбца docid. Первый из document (Docid_h), второй из linkeddoc (Docid).
392 1606845
>>606766
Анончик, спасибо! Вроде то, что нужно

Как стать таким же клевым?
393 1606861
>>606845
Пока только эту книжку осилил, может поможет. А это задание с собеса или ресурса какого?
На деле мне кажется запрос хуевый
>>605561
394 1606877
>>606861
Нет, лол, это реальная таска
1.png34 Кб, 957x341
395 1606999
Подскажите нюфагу. Есть таблица с полями user_id, event_date и event_type. Нужно для каждого месяца вернуть число новых пользователей и число пользователей, вернувшихся в следующий месяц.
По отдельности я два корявых запроса написал, а как объединить их теперь, не знаю.
396 1607161
>>606999
А если делать через join все? Будет ли это максимально плохо?
select *
from
(select resuit.monts_reg monts_reg, count(reg.user_id) registr
from
(select reg.user_id, reg.monts_reg, log_first.monts_log
from
(select user_id, DATE_FORMAT(event_date, "%m") monts_reg
from events
where event_type= 'register'
group by user_id
order by user_id) reg
join
(select user_id, min(DATE_FORMAT(event_date, "%m")) monts_log
from events
where event_type= 'login'
group by user_id
order by user_id) log_first
on reg.user_id=log_first.log_id ) resuit
group by resuit.monts_reg) register_count
join
(select resuit.monts_log monts_log, count(reg.user_id) login
from
(select reg.user_id, reg.monts_reg, log_first.monts_log
from
(select user_id, DATE_FORMAT(event_date, "%m") monts_reg
from events
where event_type= 'register'
group by user_id
order by user_id) reg
join
(select user_id, min(DATE_FORMAT(event_date, "%m")) monts_log
from events
where event_type= 'login'
group by user_id
order by user_id) log_first
on reg.user_id=log_first.log_id ) resuit
where resuit.monts_reg+1=resuit.monts_log
group by resuit.monts_log) login_count
on register_count.monts_reg=login_count.monts_log
396 1607161
>>606999
А если делать через join все? Будет ли это максимально плохо?
select *
from
(select resuit.monts_reg monts_reg, count(reg.user_id) registr
from
(select reg.user_id, reg.monts_reg, log_first.monts_log
from
(select user_id, DATE_FORMAT(event_date, "%m") monts_reg
from events
where event_type= 'register'
group by user_id
order by user_id) reg
join
(select user_id, min(DATE_FORMAT(event_date, "%m")) monts_log
from events
where event_type= 'login'
group by user_id
order by user_id) log_first
on reg.user_id=log_first.log_id ) resuit
group by resuit.monts_reg) register_count
join
(select resuit.monts_log monts_log, count(reg.user_id) login
from
(select reg.user_id, reg.monts_reg, log_first.monts_log
from
(select user_id, DATE_FORMAT(event_date, "%m") monts_reg
from events
where event_type= 'register'
group by user_id
order by user_id) reg
join
(select user_id, min(DATE_FORMAT(event_date, "%m")) monts_log
from events
where event_type= 'login'
group by user_id
order by user_id) log_first
on reg.user_id=log_first.log_id ) resuit
where resuit.monts_reg+1=resuit.monts_log
group by resuit.monts_log) login_count
on register_count.monts_reg=login_count.monts_log
397 1607228
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
398 1607929
Что значит -1?
В циклах встречал
sage 399 1608773
>>607929
это значение
в коде видел
400 1608816
>>607228
Не знаю про "где посмотреть", но типичный кейс с ETL с использованием хадупа -- это реплицировать редко используемые, не апдейтящиеся данные с какой-нибудь активной дорогой бд на дешевый хадуп.
Но это довольно тяжело представить в виде пет проекта
401 1608818
>>607161
Чем больше подзапросов тем хуже.
image.png28 Кб, 548x325
402 1610508
Вы нарушаете философию UNIX!
403 1610514
>>610508
Даёшь CSV!
404 1610534
>>610508

>make every programm a filter



чтоб фильтровать прыщеблядей пердолящих сосноль от нормлаьных людей
405 1610597
>>610534
select col1 col2 from data.txt | where col1 -eq 123 | order by col2 asc
406 1610642
>>610597
cat db.json | jq -r '.items | sort_by(.col2)[] | select(.col1 == 123) | [.col1, .col2] | @tsv'
cat db.json | jq -r '.items | map(select(.col1 == 123)) | sort_by(.col2)[] | [.col1, .col2] | @tsv'
407 1610647
>>610642
А вот XPath так не умеет.
408 1610737
Какие есть современные удобные встраиваемые базы данных
409 1610742
>>610534

>чтоб фильтровать прыщеблядей пердолящих сосноль


Расшифруй, ничего непонятно.
410 1610794
>>610742
Сразу видно нормального человека, не сидящего в /s/.

> чтобы отсеивать линуксоидов, проводящих всё свободное время в эмуляторе терминала

411 1610798
>>610737
sqlite говорят норм
412 1610803
А есть ли вообще хоть одна причина юзать монгу?
Если постгря идеально умеет в json?
413 1610864
>>610534
*nix фильтрует неосиляторов и прочий желчный сброд вроде тебя.
414 1610867
>>610803

>А есть ли вообще хоть одна причина юзать монгу?


С монгой тебе не нужно искать оправданий тому, что ты не можешь написать оптимизированный запрос на SQL.
415 1610874
>>610864

продолжать использовать нечитаемые высеры пердящих дидов из 70х
416 1610894
>>610874

Айтишнег должен сидеть на Лине, фронтендеры на маках.
Таков закон.
На Винде только тупые.
417 1610896
>>610874
Пердящие деды из 70-х писали настолько эффективный код, что бизнес-задачи целой корпорации требовали меньше железа, чем одна страница с реактом в 20-х.
418 1610905
>>610896
Причем у тут деды? Они бы охренели, от rps и бигдат, которыми мы не напрягаясь рулим.
А реакты хотят пользователи.
Мы бы обошлись command line tools.
419 1610907
>>610905

>Мы бы обошлись command line tools.


Пердящий дид
420 1611234
>>601858
upd. порывшись в самых глубоких клоаках китайских интернетов, нашел рабочие кейгены для большинства продуктов редгейта.
https://drive.google.com/openid=1cdIodi9zIfReP0M3sHl6GxfNeazkwyUH
там кейгены и инструкции к ним. виндовский антивирус ругается, поэтому, если боитесь, запускайте на виртуалке
421 1611238
422 1611471
>>601858

юзаю TOAD написанный на божественном Delphi
423 1611489
>>610905

>>А реакты хотят пользователи.


Но я не хочу реакт, мне вообще этот современный дизайн для планшетов на ПК не нравится (огромные буквы и неинформативные картинки с кучей эффектов и тормозов). Мне уровня фейсбука вполне достаточно. Реакт хочет заказчик, а пользователь жрет что дают.
мимо дед-пользователь
424 1611529
>>611489
Но ведь реакт вообще не про дизайн, он только про иерархию компонентов, внешний вид которых может быть любым.
425 1611599
>>611529

Ревкт, как синоним жирных билдов, оптимистичного ux, анимашек и подобного говна.
изображение.png6 Кб, 635x317
426 1612308
Есть одна таблица(пикрелетед),всё хорошо пока событие, идёт в рамках одной смены, но если ВремяНачала попадет на первую смену, а ВремяКонец на вторую, нужно это событие порезать на два.

Т.е. у нас событие govno длящееся 40 минут, 20 из них попало на 1 смену, 20 на вторую, нужно сделать два события govno, в обе смены, с нужной длительностью.

Временные смены фиксированы( положим с 9 до 9), есть даже вторая таблица, где хранятся все смены(но к ней нет прямой привязки, но можно заджоинится по ДатаВремя).
427 1612708
Какая субд?
Как выглядит табличка-справочник со сменами?
Что ты хочеш написать? Select, который будет генерировать новые строки на основе твоего условия, или Insert, который прямо во время события будет укалдывать в твою табличку 1 (или 2) строчки?
428 1612765
>>612708
-Mssql
-КонецСмены,НачалоСмены,ДатаКонца,ДатаНачала,НомерСмены
-Селект
429 1612766
>>612765
Да, номер смены не ИД, а просто 1 или 2.
430 1612814
Тут обсуждают монгу? Кто-нибудь знает, почему может выдаваться ошибка
"MongoError: Topology is closed, please connect"?
431 1613553
>>612765
Чем отличается "КонецСмены" от "ДатаКонца"?
432 1613592
>>613553
Первое со временем, второе просто дата
433 1614072
>>550921 (OP)

>Разбираемся, почему PostgreSQL - не Oracle


Почему?
434 1614091
>>614072
Наивно. Сюда в основном заходят, чтобы спросить, как прямо сейчас решить какую-то конкретную задачу и, получив ответ, уходят. Никаких обсуждений, ничего интересного :(
435 1614100
>>614091
Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулю
436 1614910
Есть кто шарит за serverless db? Мне нужно вкатится, но не хочу тратить время на неправильный курс, может анончик подскажет. FaunaDB вам как?
437 1614937
>>614100

>Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулю


Террадата/hive
438 1614939
Такой вопрос.
Есть, например, таблица материалов. Для получения каждой единицы материала надо сколько-то компонентов. Причём основываясь на количестве компонентов, затраты должны считаться автоматически.
Как это лучше организовать с точки зрения БД?
Вынести количество и затраты в отдельную таблицу?
439 1615124
>>613592
Держи.
t_event - табличка с событиями, в ней start_date - датавремя начала, end_date - датавремя окончания
d_work_shift - табличка со сменами, в ней start_date - датавремя начала, end_date - датавремя окончания

Select
e.event_id
,s.work_shift_id
,iif(e.start_date >= s.start_date, e.start_date, s.start_date) as start_date
,iif(e.end_date >= s.end_date, e.end_date, s.end_date) as end_date
from t_event e
inner join d_work_shift s on
(e.start_date >= s.start_date and e.start_date < s.end_date) or (e.end_date >= s.start_date and e.end_date < s.end_date)
440 1615129
>>614937
Толсто
>>614100
Какой проект-то? Интернет-магазин?

Я в любом случае за постгрес между ним и майскл, в 1000 раз больше опций. Кажется, mySql по-прежнему не умеет в CTE даже, что уж говорить про оконные функции и прочие ништяки.
441 1615177
>>615124
Я тоже пробовал что-то вроде этого.Конкретно в этом варианте:
1) Не добавляют строку, а просто меняет время начала-конца
2) Вместо того чтобы резать просто подставляет Время смены на которою заходит верхняя граница( При том не высчитаное, а просто начало-конец)

Например:

Мы полагали что смена идёт с 9 до 21, и выходит:
Старая запись
8.15-9.15
Новая Запись(которую вернул запрос)
9,00-21,00
442 1615178
>>615177
Ну с датами в iif наверное что-то нахуеверчено, щас почекаю, а вот что он не режет, это уже проблема.
443 1615190
>>615124
а нет погоди, таки режет, просто iif втором местами поменяны были e.end_date, s.end_date, и я неправильно счтал datediff. Спасибо аноныч.

А что будет если событие скажем длинной в неделю? Отдельную обработку для него делать?
444 1615206
>>614939
Я так понял материал А изготавливается из материала B, который в свою очередь из материалов C и D?

Тогда иерархическая таблица типа
matrial | quantity | parent_id | purchased

parent_id - ссылка на запись в той же таблице на материал, который изготавливается из этого материала

purchased - булевы флажок, показывает, что материал "нижнего уровня", не из чего не изготавливается, а покупается

Делаешь рекурсивный запрос, сначала выбираешь "верхние", материалы, у которых нет paent_id, к ним юнионишь те, у которых parent_id - это айди первой итерации, из всего, что получилось делаешь select sum(quantity) ... grop by material where purchase=true
tabl.PNG3 Кб, 400x111
445 1615209
>>614939
То есть если хуёвина А изготавливается из шести хуёвин B, а та - из трёх хуёвин С и двух хуёвин D,
15772003267793.jpg174 Кб, 1080x1063
446 1615233
>>615209>>615206
Как-то так.
Но всё-таки уточнение:
есть объект А, для его изготовления нужен: объект B в количестве, например, 2 штук, объект C в количестве 3 кг и объект D в количестве 5 литров. Причём стоимость 1 штуки B, 1кг C и 1 л D вынесена в отдельную "справочную" таблицу.
Надо: организовать всё это во взаимосвязанные таблицы и подсчитать затраты на А, причём, желательно, сразу, основываясь на данных "справочной" таблицы.
Т.е. B, C, D - компоненты A, надо ли эти компоненты все в один столбик забивать? Или каждому - отдельный столбец? Их же очень много может быть. А что насчёт количества компонентов? Их вместе с названием писать типа B - 2 шт. или тоже вынести в отдельную таблицу?
image.png37 Кб, 1383x626
447 1615538
у меня есть пикрил как мне просуммировать все результаты, то-есть что бы было не рядов а 3
такая

3testRegistration215 766
1test1200
6user300
544596.png22 Кб, 730x355
448 1615690
Последние дни вкатываюсь в реляционные базы данных. Пытаюсь спроектировать хранение формул в таблице. Идея примерно такая, что сложные формулы декомпозированы на мелкие формулы, хранящиеся в таблице в виде ид_формулы, операнд1, операнд2, операция. При этом операнд может быть либо внешним ключом на другую формулу в этой таблице, либо внешним ключом на некое поле в другой таблице. Какие подводные камни? На связи в ER сильно не обращайте внимание, я пока не до конца понимаю, что я делаю.
449 1615789
>>594952
Двачую, сикуэль это как на ангельском просто писать в правильном порядке ВЫБРАТЬ хуйню ИЗ таблиц ПРИСОЕДИНЕННЫХ к другим таблицам ГДЕ ... ГРУППИРОВАТЬ ПО. Все максимально логично.
Отчет1-1.png512 Кб, 2801x1169
450 1615900
Помогите заплутавшему студенту, пожалуйста. Делаю АИС, застрял на проектировании сущностей.

Для формирования договоров на платные услуги, доп. соглашений с пациентами, штатного расписания и графика отпусков нужно хранить реквизиты поликлиники (в договоре и соглашениях используются всякие номера и счета, в расписании и графике - наименование организации). Я не понимаю, куда и к чему таблицу с реквизитами присобачить. Накидал по-быстрому схему. Где и какой внешний ключ создавать? К "ДопСоглашению" привязывать? А то, что атрибут "Наименование организации" потом в штатном расписании и графике отпусков используется, ничего?
451 1615903
>>615900
Уже вижу косяк с графиком работы, но не суть.
452 1615953
>>615903
Бля не, нет косяка.
453 1616205
А зачем у постгреса помимо баз и таблиц еще какая-то отдельная сущность - схема? В чем смысл?
454 1616350
>>615690
И нахуя здесь бд нужно?
455 1616688
>>615690
Одно время тоже об этом думал.
В итоге пришел к выводу, что удобнее хранить формулу текстом и парсить уже в приложении ее.
456 1616691
>>615190
А что должно быть?
457 1617426
А по эластику и кибане тоже тут вопросы задавать?
458 1617943
>>617426
Ну ты задай на всякий случай, мб и ответят.
В основном, тред конечно, про реляционки.
459 1618026
>>550921 (OP)

>Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс


чтобы было, на кого можно подать в суд
460 1618226
>>617943
Да я уже разобрался.
5a3769a7-af61-48a3-a4ee-842fd9cce51f.png76 Кб, 852x588
461 1619195
Не совсем пойму, в каких ситуациях можно без страха использовать shared кластер в Mongo Atlas - только для разработки, или если совсем небольшая приложуха, то и в проде нормально? "Low-traffic applications" - это насколько "low" подразумевается? Поначалу база будет совсем маленькая, не ожидаю 500 одновременных соединений и т.д. А то 0.08$ это 4к в месяц, дороговато. А поднимать монгодб вручную на том же digital ocean выглядит слишком сложно.
462 1619889
>>567135
та хуевина похоже на mysql workbench
463 1619895
>>619889
вообще их много можно поискать по запросу ER diagram generator/creator
https://editor.ponyorm.com/user/pony/pycon2014/designer
image.png675 Кб, 1041x551
464 1621181
Аноны помогите советом. Реальные данные не могу привести, но попытаюсь объяснить проблему на примере.
Вообщем есть человек и у него может быть множество различных транспортных средств. Например автомобиль, велосипед, танк, самолет и прочее. Для каждого из транспортных средств своя таблица. Таких таблиц может быть в принципе неограниченное количество. У человека каждого трансп средва может и не быть, каких-то может быть овер9000 и тд.
Вопрос. Как правильно организовать получение всех трансп. средств минимальными затратами, дабы каждый раз не делать селекты из каждой таблицы?
БД postgresql. Пробовал вариант с наследованием, но когда делаешь селект из базовой таблицы (например трансп. средство) то он возвращает данные из всех таблиц, но уникальные столбцы каждой таблицы соответственно не выводятся и плюс родительская таблица всегда получается пустой.
Единственный вариант который вижу - добавить таблицу, в который будут храниться типы трансп. средств которые есть у человека и соответственно делать селект из нее, а потом уже программно обходить только нужные таблицы. Но этот вариант очень ущербный в плане проверки целостности при каждом добвлении / удалении новой записи в любую из таблиц.
465 1621949
>>621181
Промежуточная таблица, посмотри на примере адвенчур воркс ордер и ордер детаил.
466 1622164
>>611489
на фейсбуке ux/ui так себе кста, даже блят не читаемо, если сравнивать с вк, 2 млрд пользователей с вытеканием глаз
467 1622282
поставил postgres 9.6 voidlinux
слинковал сервис из /etc/sv/postgres/ в /var/service
выполнил sudo -u postgres -i
пердолю initdb --pgdata=/var/lib/pgsql/data
и выдает creating directory /var/lib/pgsql/data ... initdb: could not create directory "/var/lib/pgsql": Permission denied
есть дока не помогает как мне заставить все ето заработать
То есть поставил, врубил сервис, ща создаю кластер баз даных в виде директории где все будет хранится? Но он арет про разрешения
468 1622403
>>622282

> Permission denied


sudo в помощь?
469 1622436
>>622282
sudo !!
470 1622466
Cап, эскьюэлач, сейчас будет тупой вопрос!
У меня в бд есть таблица с записями типа:
https://pastebin.com/raw/bYrcijf2
И записей в таблице до пизды более 20тыс.строк, так, вот, как вы можете видеть, в столбце dates хранятся даты в виде json массива, в котором бывает до 30 элементов, и чтобы найти записи с определенной датой, я выполняю запрос с dates like "%DD.MM.YYYY%".
Мне это видится лютым колхозом, и собсна, реквестирую способы перестроить бд чтобы от данного непотребства избавиться.
Единственный вариант, что я вижу, создавать для каждой даты отдельную строку, но мне кажется, что тогда очень сильно возрастет объем, занимаемый бд.
image.png108 Кб, 881x907
471 1622508
>>622282
продолжение:
те кто писал sudo (dosu desu) был прав отчасти я пробовал sudo и su, зашел через sudo -u postgres -i

как я понял мне надо сначала поднять базу данных на локалхосте, создал тестовую db через createdb
Нужно ли редачить конфиг? pg_hba.conf и postgresql.conf
как например тут это описано https://stackoverflow.com/a/38466547/6757388
хуле это не описано в доке
я думал поставил пакеты и все блят, через pgadmin4 заходишь и создаешь нужные бд

Ну так вот вопрос че делать дальше, пробовал через psql и просто localhost писать
472 1622509
>>622466

> Единственный вариант, что я вижу, создавать для каждой даты отдельную строку


Да.

> тогда очень сильно возрастет объем, занимаемый бд


200к строчек это ни о чем, так что поэтому поводу можешь не переживать.
По сути ты тут выбираешь между скоростью запроса и объемом бд. Если первое тебя не беспокоит, то ничего не делай.
473 1622514
>>622508
оооо, через pgadmin3 зашёл, попробую разобраться шо за магия
474 1622532
>>622509
Понял, спасибо
475 1622536
>>622466
А какие у тебя ключевые поля в этой таблице?
476 1622538
>>622466

>создавать для каждой даты отдельную строку


Зато повысится уровень нормализации и ты сможешь делать нормальные фильтры, джойны и так далее.

Второй вариант, хранить и работать с ними не как со строкой, а как с типом jsonb[], для работы с которым есть нормальные функции, а не поиск лайками.
477 1622545
>>622536
Здесь ключей нет, это типа прокси, которая соединяет данные из остальных таблиц.
Это плохо?
478 1622551
>>622538

>jsonb[]


Резонно, но мне показалось, что поиск по одной строке будет быстрее чем по массиву со строками. Проведу пару тестов
479 1622561
>>622551
Вопрос в том, как ты потом собираешься жить, храня данные в таком бесструктурном виде.
480 1622641
Что делает -1?

coalesce(govno, -1)
481 1622653
>>622641
Возвращает -1, если govno - null.
sage 482 1622819
>>622164

>>на фейсбуке ux/ui так себе кста, если сравнивать с вк


Чет я зря про фейсбук написал, последний раз когда на него заходил - он от вк не отличался.
483 1623471
>>622514
подключился к локальной базе данных в pgadmin4 только через 192.168.0.10, после того как увидел через ss -noa, чому так? Я же настроил в конфиге через локалхости и любой айпи
484 1623545
>>623471

> любой айпи


Любой айпи = он сам себе выберет какой.
485 1624342
Сап, реляционные. Такой сетап:
Есть база, в базе меня интересуют три таблицы, две идентичные, третья связана с ними, одна запись третей таблицы связана только с одной записью в одной из таблиц. Нужно получить результирующую таблицу со всеми полями из этих таблиц + пару дополнительных полей, заполняемых в зависимости от значений в полях изначальных таблиц.
Поначалу понятно, хуярим два иннер джоина, потом юнион результатов. А вот как добавить поля и заполнить их я хз. Сами методы для дерганья данных я знаю, но как написать код добавляющий и заполняющий эти поля я не очень осознаю. Тупо какими-то циклами или можно к джоинам как-то прикрутить, шоб изящно было?
Мимонубас
486 1624369
>>624342
Можно прямо в выражении определить "вычисляемую таблицу" и сделать джоин с ней. Это зависит от конкретной СУБД, в оракле будет типа такого:
(select 1 as "a", 2 as "b" from dial union select 3, 4 from dual)
487 1624693
>>624369
Не совсем осознал, можешь привести пример более наглядный, с табличкой мб какой?
488 1624698
>>624693
Например, вот.
-- Создаём и заполняем таблицу:
create table mytable (id integer not null);
insert into mytable (id) values (1);
insert into mytable (id) values (2);

-- в скобках - table expression, джойним его с mytable
with t as (
select 1 as mytable_id, 'foo' as val from dual
union
select 2 as mytable_id, 'bar' as val from dual
)
select * from mytable
inner join t on (mytable.id = t.mytable_id);
489 1624700
>>624693
Или тебе не данные нужны, а прям новую таблицу создать? Тогда да, смотреть в словаре данных, какие в тех таблицах колонки, и вручную через циклы их добавлять в новую таблицу.
490 1626946
Хай, аноны, есть следующая задача (всплыла из-за говнокода при решении другой задачи):
Есть результат запроса с полями
id1, id2, id3
Если id1 и id2 в двух строках меняются местами (вроде 1 10 5 и 10 1 5), то это гарантированно дубликаты.
Можно ли как-то их выпилить? Думал васянскую хэш-функцию запилить, но она не гарантирует корректной работы, с груп баем тоже ничего придумать не могу.
491 1626950
>>626946
А все, сам понял, id1 и id 2 же неодинаковые, можно просто id2 > id1 выбрать.
492 1626951
>>626946
select distinct least(id1, id2), greatest(id1, id2) from mytable;
493 1626952
>>626951
Ух ты, спасибо.
494 1627246
Добрый день!
Застрял на задании по вложенным запросам --Получить спецификацию монитора, имеющегося в наличии на складе, цена которого минимальна*.

Не могу понять что не так и как вывести нужный результат.
Может кто нибудь подсказать в чем ошибка что не так ?
изображение.png10 Кб, 969x522
495 1627737
изображение.png11 Кб, 827x482
496 1627741
497 1627764
Помогите нубу
Есть таблица users на 60+ колонок, 50 из которых могут изменяться со временем. Моя задача создать новую запись если старая изменилась в любой колонке НЕ удаляя старую, то есть UPDATE не подойдет.

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

INSERT INTO users(col_1, col_2, col_3,...col_50)
SELECT %[1]v, %[2]v, %[3]v, .... %[50]v
WHERE NOT EXISTS(SELECT (col_1, col_2, col_3,...col_50) FROM users WHERE col_1=%[1]v, col_2=%[2]v, col_3=%[3]v, ...col_50=%[50]v);

Если колонок было до 5 еще ладно, но когда их много это решение совершенно не годится
498 1628588
>>627764
Покури про scd
499 1628980
>>628588
Спасибо большое, это то что нужно и даже лучше, хоть и с реализацей пока не полностью разобрался в силу малого опыта
500 1629175
>>628980
На этапе сбора данных. Ssis умеет или ручками, через код.
image.png22 Кб, 900x570
501 1629431
у меня есть колонка под названием "to" и "from"
собственно проблема на пикриле , как фиксить?
изменить название колонки не вариант, база не моя
502 1629471
Посоветуйте курс для того, чтобы смочь начать проходить простецкие задания для собеседований (SQL это не главное требование, но всегда присутствующее). Все, что помню из школы/вуза SELECT *

Можно сложный, можно на английском. Часов на 5-20.
503 1629477
>>629431
Меняй через with, в чем проблема?
image.png6 Кб, 985x53
504 1629508
>>629477
можно было просто вот так неуч
505 1629601
>>629431
Вот так и пиши “to” и “from”
506 1629605
>>629471
На сколько знаю годноты кроме sqlex нет(sql-tutorial)
507 1629720
>>629431
Возьми в кавычки: `to`
508 1629721
>>629605
спасибо за сайтец

// мимокрокодил
509 1630108
Бля я тупой или что. Мне нужна in-memory SQLite DB, а у меня есть файлик dbtest.db и я хочу таблицы оттуда выгрузить, но куда я не смотрю везде говорят ПРОСТО поставь вместо имени вот этого dbtest.db :memory:, но блять я не хочу писать в коде таблицы, но сохранять хочу в памяти. А если я просто сделаю "jdbc:sqlite:personinfodb.db::memory:" То будет синтаксическая ошибка в имени бд, т.е оно считает что
personinfodb.db::memory: и есть имя бд (неважно сколько там : перед memory, в любых вариациях ошибка.)
510 1630190
>>629175
Все здорово, разобрался с типами scd, хэш функциями для колонок, написал свои триггеры, создал служебные таблицы, теперь все клево и быстро
511 1630220
Есть профит от datagrip? Своим скудным опытом попытался найти отличия от встроенного БД функционала в других продуктах jetbrains не увидел разницы.
Мне вообще нужна относительно легковесная штука с автокомплитом под postgres на линукс, pgadmin со своим апачем раз в месяц стабильно отваливается, надоело уже.
512 1630266
>>630108
а разве нужно ставить имя для базы в памяти? пробуй просто :memory: и или ты там хочешь несколько баз
513 1630720
>>630266
Я хочу написать дбшку как файл, после этого когда буду делать коннекшон просто поставить дбшку, а не писать руками опять. Но я вроде бы нашел, что проблема в какой-то мелкой запятой, которую я не могу найти
514 1630975
есть таблица с id,chop,product,sale
Делаю так
Select chop,product,(SUM(sale)/(select sum(sale)from t1))*100
From t1
Order by chop,product
515 1631033
>>630975
В чем вопрос то?
516 1631083
>>630975
>>631033
найти долю
517 1631215
>>630975
все отбой
518 1631830
Как настроить секционирование на mysql?
Чтоб оно автоматически резало на секции, какой примерный алгоритм?
519 1631850
Подкиньте IDE нормальную, чтоб работала с большинством бд.
520 1631881
image.png39 Кб, 1174x627
521 1633787
>>627741
Что то нихуя оно не выбирает
522 1635151
анон, мне нужно передать параметром таймспан и преобразовать его в дейттаймп в формате гггг-мм-дд как это сделать?
523 1635177
или я могу конвертировать ticks в datetime, datetime же в тиках хранится но я почему то не нашел ни одного способа преобразовать лонг в тики и тики в дейттайм
524 1635300
>>631850
Aqua data studio
ваи.png7 Кб, 420x187
525 1635681
Как сгруппировать чтобы было как на пике. Вывести например товар яблоки с группами больше одной
526 1635688
>>635681
WITH Govno
AS
SELECT COUNT(Товар)
FROM Фрукты
GROUP BY Группа

SELECT Товар
WHERE Товар in
(
SELECT *
FROM GOVNO
WHERE GOVNO>1
)
527 1635689
>>635688
А бля, Aкелла промахнулся, вот так:
WITH Govno
AS
SELECT COUNT(Товар) AS Duble
FROM Фрукты
GROUP BY Группа

SELECT Товар
WHERE Товар in
(
SELECT Duble
FROM GOVNO
WHERE Duble>1
)
изображение.png334 Кб, 700x669
528 1635721
>>635689
ааа бляяять да идите нахуй короче

SELECT Товар, Группа
FROM Фрукты
WHERE Товар in
(
SELECT Товар
FROM Фрукты
GROUP BY Группа
HAVING COUNT(Товар)>1

)
529 1635857
>>635721
не нихуя
530 1635945
>>635857
Хз, вроде все верно, покажи что возвращает. Все вместе и отдельно подзапрос.
531 1635954
>>635945
.>>635857
а вижу в чём дело...ну врот его ебал в уме это всё придумывать, ты уже должен был понять как делать. вот так решается как я написал, сядь поправь, принцип тот же, сравниваем через ин с групировкой которую сделали в подзапросе
image.png145 Кб, 1192x737
532 1636645
>>550921 (OP)
Здарова, аноны.
У меня есть БД "студенты сдают проект".
Основные сущности на пикрилейтед. Только вопрос вот в чём. У меня по ТЗ препод (teacher) может быть и руководителем (curator) проекта, и проверяющим (comission_member). Как рациональнее всего сделать разделение учителей на кураторов и участников комиссии? Обяз ли для этого создавать подсущности, которые будут хранить только айди? Хелп
533 1636672
>>636645
Таблицу кураторы и мембер обьедени в одну, они у тебя делают тоже самое.
534 1636681
>>636672
Кураторы хранятся в Project, а комиссия выставляет оценки через project mark. У них разные обязанности
535 1636683
>>636681
На каждый проект по 3-5 челов из комиссии ставят оценку проекту, которая хранится в project mark
536 1636739
>>636681
Тебе нужно две таблицы:
-ФИО прподователя - ИД
-Роль(куратор\мембер\оба) - ИД

И из них уже собирай по ключам.
537 1637184
Ребят, помогите с запросом. Я пиздец тупой.
Есть 3 таблицы:
Customer: id, name, lastname;
Product: id, label, price;
Customer_Product: customer_id, product_id, date;

Запрос: Поиск покупателей, купивших меньше всего товаров.

У меня получается только так:

SELECT c.name, c.lastname FROM customer c INNER JOIN customer_product cp ON cp.customer_id = c.id GROUP BY c.name, c.lastname HAVING COUNT(cp.product_id) < 2 limit 3;

Во что вставить вместо двойки, не пойму... Или вообще запрос не так делаю?
538 1637186
у меня postgresql, забыл добавить
vdvsv.png5 Кб, 249x195
539 1637212
>>635945
>>635954
Все заработало, спасибо =)
declare @t table ( id int, tovar varchar(250), grup varchar(250) )
insert into @t
values (1, 'яблоки', 'Фрукты'), (2, 'яблоки', 'Овощи'), (3, 'яблоки', 'Автозапчасти'),
(4, 'яблоки', 'Шлакоблоки'), (5, 'Говно', 'Говнище'), (6, 'Груши', 'Фрукты')
, (7, 'Груши', 'Овощи'), (8, 'Груши', 'Автозапчасти'), (9, 'Груши', 'Шлакоблоки'),
(10, 'яблоки', 'Автозапчасти'),(11, 'яблоки', 'Автозапчасти'),(12, 'яблоки', 'Автозапчасти');

SELECT tovar, grup
FROM @t
WHERE tovar in
(
SELECT tovar
FROM @t
GROUP BY tovar
HAVING COUNT(*)>1
)
group by tovar,grup
540 1637341
>>550921 (OP)
как с камнями?
541 1637585
>>637184
Юзай min()
542 1637837
Гайз, такая ситуация -- не могу выбрать литературу для вкатывания в sql(понадобится мне по работе в будущем)
Может кто-нибудь рассказать свою историю успеха и кто как вообще учился этому ремеслу?
(3 курс-кун)
543 1638472
Есть ли те, кто учил этот язык в университете и те, у кого его не было, кто изучал самостоятельно довольно поздно в 20, 25,30,35 лет? Сколько понадобилось времени, тяжело ли было? Пригодились ли вузовские знания?
544 1638493
>>550940
Наверное
Селект доля продаж товара с НДС фром таблица
Гроуп бай дисенд

Если каждое дно, магазин, товар в отдельной строчке, если нет, отсортировать по параметру, который выведет отдельно каждый из необходимых и добавить дисенд, дабы это было в убывающем порядке
545 1638545
Бамп
546 1638562
>>638545

> 545 сообщений


> Бамп

547 1638659
>>638562
Я тут недавно, потому деталей не знаю. Не работает, потому что много постов?
548 1638720
>>638659
Да, если постов больше определённого числа, называемого бамплимитом (здесь 500), тред перестаёт подниматься и начинает "тонуть".
549 1638736
>>638720
Благодарю за разъяснение
550 1638879
>>638562
Разве не 1000?
551 1639932
Перекат пилите
553 1641660
>>550921 (OP)
Инфу для вкатывания, быстра!
554 1653314
>>638472
В 20 лет, пару месяцев заняло изучение. Ничего сложного особо нет, вся логика - суть операции над дискретными множествами и их подмножествами. И то не проный набор помоему.
555 1653862
Правильно ли я понимаю, что OUTER JOIN'ы вернут то, что вернул бы INNER JOIN, плюс (возможно) строки с NULL'ами?

То есть что нельзя пропустить нормальную здоровую строчку без NULL'ов, используя INNER JOIN?
dog.jpg51 Кб, 500x667
556 1654084
Анончики, подскажите как можно максимально анально огородить бд на MySQL? Нужно сделать так, чтобы пользователь не мог заглянуть в базу (пароля и логина от рута и пользователей привязаных к бд он знать не будет) при том, что сервер MySQL разворачивает локально у него на компе.
557 1654169
Анончики, как в Редисе сделать поиск ключей по значению?
Например, в бд лежат ключи со значениями в виде словарей, и мне надо выбрать все ключи, у которых одно из полей словаря равно нужному мне значению
558 1654681
Не знаю туда ли зашел. Но проблемы в майрософт access. Создаю таблицы и пытаюсь их связать в "схеме данных". Связываю пункт с пункт с типом данных "счетчик" (пик1), он одинаков в нескольких таблицах. Когда связываю пик2, то ошибка пик3 происходит. Пункты эти одинаковы во всех таблицах, с одинаковыми параметрами. Пробовал связывать как до заполнения и любого вмешательства, так и после - результат пик3 всегда.
Хотя есть одно но, если я уберу галки "каскадное обновление связанных полей", и "каскадное удаление связанных полей", оставив только "обеспечение целостности данных", то получается создать связь, но мне те галки нужны. Что делать?
559 1655055
>>654681
в таблицах ты должен первичные ключи расставить, хк как ПК на акцесском
560 1655059
>>654084
выдать учкетку ему с ограниченными правами.
Или вариант для супермозга, создать вторую базу и настроить dblink между, а чтоб избавиться от @блабла.бла синонимо нахуярить

А если всерьез то я не понял вопроса
561 1655060
>>653862
outer - full, пустые могут что слева быть что справа
inner - left, right, просто джойн. слова иннер аутер опускаются из-за ненадобности
562 1655062
>>638472
в универе научился писать селект из одной таблицы.

учить в 23 начал, за 3 месяца ежедневного обучения я знал процентов 80% из того что пишут взрослые дяди.
ну а там на их примере научился дальше.

3 год работаю ораклистом. полет нормальный
563 1655063
>>637837
sql-ex.ru
564 1655074
>>655055
Есть ключи. Как раз этот РЕГ_НОМ и есть ключ
565 1655083
>>655060

>outer - full, пустые могут что слева быть что справа


>inner - left, right, просто джойн.


Мало того, что ты отвечаешь не на заданный вопрос, так еще и хуйню несешь полнейшую.
566 1655117
>>655083
поясни за хуйню

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

т.е. на нем строит параметр уникальности(первичный ключ)
568 1655179
>>655117
INNER JOIN это аналог JOIN

LEFT OUTER JOIN это аналог LEFT JOIN
RIGHT OUTER JOIN это аналог RIGHT JOIN
FULL OUTER JOIN это аналог FULL JOIN
Просто OUTER не бывает

Еще бывает CROSS JOIN
Еще бывает NATURAL JOIN (не нужно это использовать)

>поясни за хуйню


>inner - left, right, просто джойн.


Вот хуйня. Inner это просто inner, безо всяких left и right.

Вопрос был про то, возможно ли теоретически упустить какую-то строчку, пользуясь INNER JOIN (а не OUTER'ами), если строчки с NULL'ами не нужны. Или же все, что добавляет тот или иной OUTER JOIN по сравнению с INNER'ом на тех же данных, обязательно содержит NULL.
569 1655307
>>655179
сори-сори перепутал, оправдываться не буду
570 1655455
>>550921 (OP)
Можно ли ввести разработку базы в контроле версий?
Хранить "CREATE TABLE USERS" в Git-е и накатывать разные версии без потери данных в той самой таблице?
571 1655653
>>655059
У пользователя на компе устанавливается сервер MySQL (который из zip архива, а не инсталлером устанавливается, если эта информация важна, а то я не силен в этих ваших бд), на этом сервере я создаю бд с которой в дальнейшем будет работать некоторая программа. Так вот, задача заключается в том, чтобы не дать пользователю добраться до этой бд. Вот, например, пользователь может запустить сервер с параметром --skip-grant-tables и в дальнейшем сбросить пароль на root'е. Как ему можно ограничить этот функционал?
sage 572 1655778
>>655653
Никак, если пользователь Админ.
Не надо на компе у пользователя устанавливать СУБД, чтобы он в ней работал, для этого используют сервер.
sage 573 1655780
>>655455
Можно, напиши скрипт, который будет превращать табличку в Json, например, и скрипт, который будет из Json инсертить данные в таблицу, с учетом identity_insert, конечно.

Можно вместо json-а написать генерилку запроса, чтобы из таблички генерился запрос, типа
merge d_user as t
using (
select 1, 'LOX'
union all select 2,'PIDR'
) as s ...

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

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

Как выбраться из говна, пойти в HADOOP и начать учить Джаву...
sage 576 1656721
>>656585
Аналогичная история была.
Уволился с последней такой работы, тока 200к платили.
Заебало говна разгребать.
Решил, что уволюись, выучу всякие там Angular для фуллстака в дополнение к шарпу, потом бигдату.

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

Потом еще заказ подкинули, и еще - все по связям с предыдущих мест. Я открыл ИП и стал работать на себя, получилось еще поднять доход, а, самое главное, теперь я сам себе хозяин, работаю из дома, сам говорю, сколько стою, в общем, куча профитов.
Проблема только в том, что я так ни хуя нового и не выучил почти, но я тут понял одно - либо учишься, либо зарабатываешь нормальные бабки тем, что умеешь. И решил я заработать хотя бы 10 лямов, чтобы их пустить в инвестиции, а потом уже жить в основном с доходов от ценных бумаг, а освободившееся от зказов время (не всех думаю дропнуть, но большинство) пускать уже на всё, что захочу, включая учебу, если смогу себя заставить, конечно.
577 1656853
Антуаны такой вопрос.

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

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

В таблице есть одинаковые строки с разными ИД. Скажем есть ИД 2 и ИД 3, в рамках этих ИД есть одинаковые строки отличающиеся только ИД, так же есть много других строк\ид, которые не повторяются, пересечения только в рамках строк у которых ИД 2 и 3.
Соотвественно мне нужны строки с ИД 2, которых нет в ИД 3. Вроде как просто решается подзапросом, но какой-то топорный метод, нельзя ли что-нибудь поизящней с OUTER JOIN прикрутить?
578 1656996
>>655119
То есть убрать этот ключ во всех другиз таблицах и оставить в одной?
579 1657791
Сап аноны, ньюфаг влетает в тред, может кто нибудь объяснить как создавать темпоральные данные в MySQL а то порывшись в инете я ничего не нашел
580 1658320
>>656853
1)Каждая строка уникальна? Полные дубли есть?
2)ID уникален?
3)Что значит: "нет в Id3" ? Требуются строки с id2 и таким набором полей которого нет ни для одной строки с id3?
4) для других id могут быть аналогичные ситуации? Требуется ли фильтрация для них?
image.png98 Кб, 1359x576
581 1659504
Анончик помоги. Ебусь который час, пытался гуглить, но я даун. С БД ни разу в жизни не контактировалне считая майкрософт аксесс
Нам скинули файл с БД какой-то, сказали открыть через VS, я открыл. По заданию нужно её заполнить чем-нибудь.

Я создал вот такую хуйню пик1.
Собсна вопросы:
1. Как сделать тут связи?
2. Как заполнить БД чем-нибудь?
image.png419 Кб, 524x524
582 1659998
Как эти ебучие запросы мониторить? Чтоб просто терминал отдельный открыть, и у меня все

>SELECT suka FROM blyad FROM ja=pidoras;


там сразу отображались? Пиздос, неужели настолько юзабилити не продумано в этом говне?
583 1660020
>>659998
Ладно, блядь, с этим разобрался. Но как посмотреть, что SQL отвечает? А то я ебал глазами парсить эти километровые генерированные запросы и думать да гадать, с какого хуя по таким юзерам у меня инфа приходит, а по таким - пустота. Будь у них очко share-ключами обколото...
584 1660075
ладно, идите вы нахуй, уже ничего не надо
585 1660185
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ СУКА НАХУЙ БЛЯДЬ РОТ ЕБАЛ ВАШЕГО MYSQL ЕБУЧЕГО СУКА НАХУЙ, ПОЧЕМУ ОН ДАЖЕ БАЗУ ДАННЫХ ДРОПНУТЬ
Д Р О П Н У Т Ь , К А Р Л ! ! !
НЕ МОЖЕТ, НЕ ПОТРАТИВ НА ПОЛНЕДЕЛИ МОЕЙ И БЕЗ ТОГО ВСРАТОЙ ЖИЗНИ-ТО НАХОЙ, А? А???? А БЛЯДЬ???!??!?!?!?!?!??!?!?!??!!
586 1660188
>>660185
блядь, лог забыл выключить, чуть весь ссд-шник не забил к ебаной матери
587 1661347
Вечер добрый. Столкнулся с такой проблемой, могу подключиться к датабазе sqlexpress на моем компьютере с любого компьютера подключенного к этой же сети. Теперь вопрос, как сделать так, чтобы к этой датабазе можно было подключиться с любого компьютера через интернет. ВПН не предлагать
588 1661483
Мальчишки, делаю SaaS хуйню. Имеются 3 тарифа (3 записи в таблице тарифов). Пользователь оплачивает какой-нибудь тариф на месяц, но спустя пару дней понимает, что всё хуйня и хочет вернуть деньги. Система рассчитывает сумму возврата исходя из стоимости тарифа и количества неиспользованных дней. Но что, если в тот момент, когда пользователь передумал использовать сервис, я подниму стоимость тарифа в 2 раза. Получается, система вернет совсем другую сумму. Следовательно, надо где-то в другой таблице хранить данные о том, по какой цене пользователь покупал тариф. Получится много лишних данных.

Я решил сделать по-другому. Когда я меняю стоимость тарифа, я на самом деле не меняю тариф, а создаю новую версию этого тарифа, а к старой версии добавляю FK на новую. И когда у старого тарифа больше не остается подписчиков, он удаляется из базы.

Норм решение, какие подводные? Или может уже есть какие-то best practices для подобного?
589 1662918
хай, ананасы!

есть огромный таблица лог вида:
userid | timestamp | actions

есть требование
userid | date_start | date_end

как из первой таблицы найти записи нужных юзеров в указанном для него периоде? (для всех юзеров периоды, с date_start по date_end разные)
590 1663447
Ну что тут у вас. Изучать sqlex и через пол года вкат на 70к ещё актуально?
591 1664151
В чем хранить контент имиджборды?

Для себя делаю скрапер двача, возник резонный вопрос в чем хранить сообщения/треды. Пока что есть безотказный вариант для аутистов - просто json на диске.
Что нужно от БД - быстрая выборка всего треда по его id, хранение нескольких версий одного и того же поста в треде, в перспективее - полнотекстовый поиск по постам.
Соответственно, мало вставок и очень много выборок.

Господа DBA, подскажите что выбрать? В базы данных умею слабо, по работе с динамкой только работал.
3333.PNG34 Кб, 1184x355
592 1665219
>>550921 (OP)
Добрейший вечерочек, господа апельсинусы. Делаю учебную хуйню про архитектурную организацию, сотворил модель данных.
Прогер во мне умер уже пару лет назад, память отлетела внахуй, но делать приходится. С инструментами разработки, можно сказать, уже не знаком, с тем, как подлезть к началу собственно реализации, тоже. Подскажите, чем делать БД и на чем быстро/удобно можно быстро намутить приложение для работы с этой самой БД?
593 1665893
Аноны, прислали тестовое не на бд разраба но там есть задание про построить объектную модель данных с типами связей по описанию процесса. Я так понял это к ообд или как это называется? Как это делается? Лол я максимум, что про реакционные модели знаю.
Понятно, что тестовое я завалю просто интересно
594 1669386
Бля, какие же хуесосы этот MySQL делали, я ебал... Элементарно не могу нагуглить, как переключаться между двумя базами под одним именем, чтоб не загружать-выгружать образ каждый раз, когда нужно поработать с бэкапом с продакшна и вернуться обратно на легкий дэвовский. Это пиздец, товарищи. Минус полчаса жизни, я не шучу нахуй.
595 1669395
>>669386
Алсо, эта хуета явно недоиспользует ресурс (RAM, CPU) моей пекарни, чтоб грузиться быстрее, блядь. Я не верю, что все в SSD упирается, там ведь гигабайт с небольшим всего, а грузится оно минут десять.
596 1669767
сап, двач
я тут хотела поинтересоваться, можно ли как-то увидеть удаленные из диалога (загруженные туда же) видео? поискала, в тырнетах пишут, что нужна прямая ссылка. как ее получить если само видео указывается пустым сообщением?
еще такая фишка, что если живешь в евросоюзе, они тебе обязаны предоставить при запросе группы, в которых ты админил и период, удаленные фотки и видео, голосовые и тд. можно ли это как-то наебать, или попросить кого-то из евросоюза с моей страницы вк запросить эти данные?
или, может, есть какие-то сайты, где какие-то уполномоченные люди сие замечательной социальной сети могли бы за отдельную денюжку предоставить эту инфу? кто знает?
597 1670430
Посоветуйте книгу по постгресу
sage 598 1672291
>>663447
Однозначно да, а то и больше. Всё по-прежнему, спрос на хороших скл-щиков большой, задания на собесах прежние.

>>664151
любую субд реляционную. Если лично для себя делаешь, ставь Sql server developer, думаю, это лучшим решением будет, как минимум решение своих проблем сможешь быстро находить.
599 1672446
>>669767
Нахуй ты это спрашиваешь в теме по базам данных, дура?
600 1674326
>>550921 (OP)
Узнал чтота же Postgres связывается с приложениями через сокеты (как правило порт 5432), есть ли люди которые ставят эту БД на удаленном сервере, а не на localhost? В принципе так можно делать, но ебучие HTTP-запросы ведь идут пиздец как долго. Есть ли резон так делать?
601 1674785
>>674326
Если для тебя критично, что запросы из бд идут "пиздец как долго", то скорее всего проблема в твоей архитектуре.
Я не ванга и не знаю, что ты там делаешь, но можешь попробовать к своему приложению какой-нибудь кэш прикрутить, или типа того.
Вообще, в индустрии все давно на микросервисах с HTTP, и ничего, как-то живут люди.
602 1674793
>>665219
Postgres + python + sqlalchemy
603 1674795
>>674793
Хотя, если тебе бд нужна как внутреннее хранилище данных приложения, то вместо Postgres возьми идущую в качестве батареек к питону sqlite3
604 1675282
В той самой книге Дейта сказано (глава 3.2) что в СУБД нет никаких указателей, связывающих одну таблицу с другой, а есть только явное задание значений, помещенных в позиции столбцов и строк таблицы Это и сейчас правда? (книга-то в 70х еще издавалась)
605 1676464
>>674793
Бля, спасибо, отдуши. Класс, сам в этом направлении двигаться и начал.
606 1678042

>>1000000

607 1678044

>>1111111

608 1678045

>>1234567

609 1678158
610 1678710
>>662918
Охуенные вводные, братан.

Во первых, какой тип данных имеет timestamp? date? time? datetime? datetime2?
Во вторых, каким образом ты собрался разбивать дату СОБЫТИЯ на НАЧАЛО и КОНЕЦ, если СОБЫТИЕ привязывается к определенной отметке во времени, а не к периоду?

Я, конечно, добоеб и может чего не знаю, но тебе нужно будет писать отдельный запрос под каждого юзера при помощи UNION
250w.jpg18 Кб, 250x328
611 1679054
Норм книжка чтобы базы данных поизучать? Так понимаю, что sqlite легче всего разворачивать и в ней не только о нем, а вообще о SQL и том как БД проектировать.
612 1679057
Суп БДач.
Можешь подсказать по хардкору:
Хочу сделать бота с кусрами в образовательных целях, но хочу сделать все максимально правильно.

Короче, какие БД для деревьев лучше подходят SQL или NoSQL?

Я подумал, что курсы лекции это вложенные структуры данных.
Т.е. документ это лист. Последняя структура данных в дереве. Но есть составные ветви типа "курс залупа ерохи"->"лекция 666"->"урок 1488"->"документы урока".
Но может быть и сразу "Курс залупа ерохи" -> "документы курса".

Вот я немного подустал думать какую же базу взять. SQL или NoSQL.
sage 613 1679163
>>679057
Очень просто.

Если ты хочешь организовать поиск, например, по названию курса или документа, то не стоит использовать обхектную БД.

Плюс почти все реляционки сейчас умеют в json, так что вообще особо не вижу проблем использоать mysql/postgres/ms sql.
там хотя бы структура понятная будет.
614 1679237
Есть одна таблица с чеками, что-то вроде:

Наименование Сумма Начало Конец
-покупка1 300р 12:00 12:30
-покупка2 125р 13:05 13:20

Нужно разбирать по минутам, т.е.
Покупка1 длилась 30 минут, это по 10р минуту, т.е. одна строка должна превратиться в 30 строк по 10р.
Как это можно реализовать?
615 1679323
>>679237
Хуя у тебя задачи всратые
616 1679666
>>679163
Ну я понемногу на этом и начал сходиться. В общем с реляционной никаких проблем не будет. Спасибо.

По сути для всей вложенности нужно будет только две модели это "Ветвь" с указанием типа и parent'a и "Лист". Хотя если вдруг я захочу вложенность всего курса вывести потребуется большое количество джоинов.
617 1679672
>>679666

> модели


Таблицы, простите. Забыл в каком я треде.
618 1680364
>>679237
Ну так построй рекрсивно поминутный набор дат и сджойни его со своей таблицей.
Другого варианта "размножить" строки за 2.5 года я так и не придумал.
619 1680487
>>680364
Ну хз, мне не разово это делать, плюс там длительность может быть больше часа, не хранить же сутки в минутах . Пока рассматриваю вариант делать apply на цикл с while, но что-то выглядит как костыль, и по реализации есть ряд вопросов.
620 1681081
Ребятки, совсем убил меня этот SQL, помогите плиз.

У меня есть Пользователь, у Пользователя есть Каталог (связь через кросс-таблицу, многие-ко-многим), в Каталоге валяется Ресурс (тоже связь многие-ко-многим через кросс-таблицу). У Ресурса есть колонка Алиас, которую пользователь устанавливает через бизнес-логику.

Как сделать так, чтобы Алиас был уникальным в разрезе Пользователя? Я только в unique index умею, но он не подходит, потому что два разных пользака могут задать одинаоковый алиас своему ресурсу и это нормально. Так что одинаковые значения могут быть в этом столбце.

Как быть? Можно какой-то справочник создать отдельный, типа Ид Пользователя - Ид Ресурса - Алиас этого Ресурса? Или какой индекс на несколько таблиц, но я хз как оно делается и можно ли это? Куда хоть копать, что гуглить?
621 1681371
Представим, есть две примитивные одноколоночные таблицы:

CREATE TABLE a (url VARCHAR(255));
CREATE TABLE b (host VARCHAR(255));

В таблице А – url'ы:
http://2ch-ebach.hk/abc
https://google.com/?query=xxx
...

В таблице B – хосты:
zhopa.com
2ch-ebach.hk
yahoo.cn
...

Как построить DELETE запрос, которая удалит из А все строки, у которых есть подстрока из Б?

Что-то типа DELETE FROM a WHERE url LIKE '%'+(SELECT host FROM b)+'%', но чтобы было не плодом моей фантазии.
44 — копия.PNG20 Кб, 595x520
622 1681528
>>550921 (OP)
Сап, покажете пример решения? Всего заданий много, но мне хотя бы пример одного увидеть.
Я так понял "весят больше чем родитель" - это нужен подзапрос. Но как мне реализовать в запросе связь между животными и их родителями?
623 1681797
>>681081
Составной ключ сделай. Модно вобще хэш вычислять и добавлять индкс. Либо в одной из таблиц генерацию делай не с 1(ну тут важно не обосраться потом)
624 1682854
>>681528
Держи
SELECT name
FROM animals as child
WHERE weight>
(SELECT weight
FROM animals as parents
WHERE parents.parent_id=child.parent_id)

>>681371
В общем виде
DELETE FROM tableA
WHERE ROWID IN
( SELECT ROWID
FROM tableA b
WHERE УСЛОВИЕ(Тут можно селект к первой таблице
);
НО, если у тебя таблицы большие тебе придётся сравнивать урлы полнотекстовым поиском, а это пиздец. Как вариант сделать им INTERSECT и по нему уже делать удаление. Ну или если тебе нужно просто уникальные записи сделать EXСРТ ну тут хз как лучше, помоему это говно тоже весьма затратное по ресурсам
625 1682880
>>682854
самофикс
WHERE parents.id=child.parent_id
626 1683031
>>681797
я нубас полный) сейчас курю мануалы, но идёт тяжело без примера
>>682854
таблицы все что на скрине, маленькие
>>682880
сейчас поразбираюсь в твоём решении, спасибо
627 1683830
Очень помогли вот эти курсы, конечно поверхностно, но нормально.
https://stepik.org/lesson/297515/step/7?unit=279275
629 1685717
>>685716
Кто сдавал, чё посоветуете?
630 1685765
В чем смысл нескольких PRIMARY KEY?.. Разве он не должен быть только один в таблице?
631 1686486
>>685765
Даже больше тебе скажу, не может быть нескольких pk на одной таблице.

Можнт быть составной PK (из нескольки колонок)
632 1687176
>>686486
Тихо, не пали контору, он особенный.
633 1687288
>>563202
лол. ну дак оракл закешировала части запросов ну и выдает тебе их мгновенно.
ты бы сравнил лучше запросы разного характера исполняемые параллельно с разными данными.
Снимок экрана 2020-05-15 в 23.31.32.png494 Кб, 2096x1800
634 1689731
.
Now you'll see why we needed groups: to look for specific values in a particular part of the DataFrame. We'll use our new function, but first we need to think of an argument. Let's group the DataFrame by the user_id column, so group_name will represent the user and the corresponding piece of data will be handled by the group_data variable. Now that we've decided what data to use as the argument, we can save it to genre_grouping .
Call the get_heavy_listener function and pass genre_grouping as its argument. Save the result in the user_id variable and print it. Note that the algorithm is not perfect: as soon as it finds a user with 50+ listens, it stops searching. But here we have at least one of our unknown music lovers! Аноны вообще не понимаю задания - помогите
screen0101.png74 Кб, 683x436
635 1691439
Как "читать" эту таблицу? Связи показывают внешние ключи к другим таблицам, но почему их блин так много, в citizens.import_id их вообще 3 штуки, а некоторые еще и выделены красным?
636 1691761
>>691439
Составной ключ
637 1692109
>>691761
А почему вдруг там красным что-то выделено? От relations.import_id аж 2 связи в citizens.import_id идут. С фига ли?
638 1692900
>>692109
Потому-что ты пидор
639 1694756
На кой иногда делают отдельные таблицы с одним единственным полем? Например есть таблица Category где одно поле - NAME VARCHAR? Вот нахрена? Почему имя категории нельзя засунуть в ту же таблицу, к которой категории и относятся, скажем это таблица Games?
640 1694781
>>550921 (OP)
Анон, посоветуй годный курс по БД. Устраиваю себе интенсив перед завтрашним собесом. Ранее БД нюхал, на уровне join'ов, но даже их мне лучше повторить. Про индексы только слышал.
641 1694813
>>694781
https://www.udemy.com/course/sql-oracle-certification/
я сейчас этот смотрю, есть на торрентах.
642 1694815
>>694813
Только надо смотреть на скорости х2, а то разговаривает ну уж очень медленно.
643 1694826
>>694781
Куда устраиваешься, если не секрет?
644 1694829
>>694826
Секрет, вдруг ты меня завтра будешь собеседовать и такой - "ага, знаю я тебя, двощер, пиздец тебе"
645 1694832
>>694813
Спасибо, анонче, сейчас буду искать.
646 1696648
Я немного новичок в sql. Подскажите, пожалуйста, вот есть у меня 2 таблицы,table1 и table2. И там и там одинаковое поле id. Как мне посмотреть на все данные правильно в этих таблицах без лишнего мусора? Обычным селектом я получаю 2 столбца id, которые еще и не равны друг другу и мне надо указывать id, который принадлежит определенной таблице, чтобы использовать его - table2.id.
647 1696888
Памахите. Вот есть столбец в таблице с 10 миллионами записей. В ней есть столбец в котором хранится всего 15 видов значений - числа от 1 до 15, для каждой записи одно из этих чисел в этой колонке в общем.
Допустим я хочу сделать order by по этому столбцу. Насколько дольше будет выполняться запрос с order by чем без него? Это вообще существенная величина или нет?
648 1697143
>>696888
Существенно дольше. Есди есть индекс, то тнет.
Тред утонул или удален.
Это копия, сохраненная 22 мая 2020 года.

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

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