Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
650 71 266

Оптимизированный баз данных тред /sql/ Аноним 19/12/19 Чтв 14:39:42 15509211
OJBwH-7400x400.jpg (9Кб, 400x400)
400x400
А вот и новый оптимизированный баз данных тред,
в котором мы
-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания
-Разбираемся, почему PostgreSQL - не Oracle
-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
-Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обещстве
-Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
-Анализируем, как работает поиск вконтакте
-Игнорируем конкаренси-шизика, не понимающего, зачем базы данных нужны
-И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно

Поехали!

Старый: https://2ch.hk/pr/res/1502870.html
Аноним 19/12/19 Чтв 14:51:53 15509402
И сразу вкачусь с вопросом к тестовому заданию, которое завалил:
Есть БД, есть хранимая процедура, которая принимает как входные данные две даты и группу товаров, а на выходе даёт выборку по продажам товаров этой группы за указанный период времени.
В задании последним пунктом стоит:
"Вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"
Что от меня хотели и как это нужно было сделать? Мозга как включить данную выборку в уже существующий скрипт мне не хватило.
Аноним 19/12/19 Чтв 15:13:28 15509603
Есть таблица с данными. Нужно что-то наподобие тэгов/меток.
Как это сделать? Отдельными столбцами? Или есть ещё варианты?
Аноним 19/12/19 Чтв 15:16:37 15509644
Аноним 19/12/19 Чтв 15:23:03 15509745
>>1550964
Тэги нужны к каждой записи. Они могут быть уникальнми, а могут быть одинаковыми.
Аноним 19/12/19 Чтв 15:38:59 15509926
>>1550940
Я бы им сказал, что надо в ORM делать.
Аноним 19/12/19 Чтв 17:30:19 15510897
>>1550960
Да просто, пилишь отдельный столбец. Если это для отслеживания изменений, то slow changing dimension.
Аноним 19/12/19 Чтв 17:33:54 15510938
>>1550940
ХЗ, какая-то кривая формулировка могу только предположить что есть ещё один столбец который отвечает за ндс.
Аноним 19/12/19 Чтв 18:43:23 15511369
>>1550940

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

Есть Магазин, что-то типа 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 Продажи.день, Магазин.имя, Группа_товаров.имя

Надеюсь нигде не ошибся. Проверьте, обругайте, плиз.
Аноним 19/12/19 Чтв 19:20:54 155117710
DsMrnDLWoAAYA2V.png (123Кб, 309x407)
309x407
>>1551136
но это же не процедура
Аноним 19/12/19 Чтв 19:22:28 155117911
DBrar.jpg (13203Кб, 2880x1728)
2880x1728
>>1551093
Да, разумеется есть отдельные поля "Продажа с НДС", "Продажа без НДС" и прочее.
>>1551136
Мякотка в том, что выложить решение нужно в виде текста одной процедуры. То есть я так понял что в том же выводе инфы по продажам определённой группы товаров (или нескольких) за конкретный промежуток времени, а срез по магазину/группе товаров вроде как предполагает lifetime сумму по магазину/группе товаров, то есть where для этого запроса в основном селекте не будет работать.

Короче вот архив с дампом и заданием. Мне уже без надобности (только для общего развития и понимания где и насколько я дурак), но может кому будет интересно поковырять или на будущее как пример тестового задания (тут я ступил ибо знаний у меня не хватает - искал-то на интерна, а не джуниора).
Ответы на 1,2 и 3 могу скинуть или пообсуждать.
Аноним 19/12/19 Чтв 20:39:39 155126012
>>1551136
Вот как-то так

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_)
Аноним 19/12/19 Чтв 20:40:22 155126213
>>1551260
Блять спасибо АБУ, нахуярил мне своих сранных табуляций, первые четырё строчки пидор
Аноним 19/12/19 Чтв 20:41:43 155126414
>>1551262
а ещё звёздочка в сумме проебалась. хотя не уверен что сумма вобще там нужна в таком виде, но похуй пляшем, суть я думаю понятна
Аноним 19/12/19 Чтв 20:44:41 155126915
Есть две таблицы:

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'ами не выдает)
Аноним 19/12/19 Чтв 20:45:17 155127216
Аноним 19/12/19 Чтв 20:46:17 155127317
>>1551269
при левом таблицы поменяй местами
Аноним 19/12/19 Чтв 21:01:10 155129418
>>1551272
лишнего и дубли
>>1551273
да эт понятно, но все равно null'ы не дает
Аноним 19/12/19 Чтв 21:36:27 155134719
>>1551260
Процедура итак выводит данные о продажах, каждая строка выводит данные о продаже: дата, магазин (в контексте задания - Аптека), касса, наименование товара, количество, группа товара, цена с/без НДС, маржа etc и в конечном итоге сколько вместе с НДС было получено за эту продажу (продажа с НДС). Я так понял что требуется чтобы строка выводила ещё за компанию соотношение продажи с НДС с суммарной продажей с НДС за этот день; + соотношение с суммарной продажей в этом магазине; + соотношение с суммарной продажей по этой группе товаров.
Ок да, тут я ступил и не уточнил, поэтому два последних вывода (магазин и группа) могут трактоваться и как "за всё время" и, что более вероятно "за сегодня в этом магазине" и "за сегодня в этой группе товаров", но в таком случае первый вывод должен быть "за сегодня продажи с НДС всех групп товаров".
Аноним 19/12/19 Чтв 22:18:58 155137720
>>1551269
У тебя в LIST_ID значения 2 нигде нет, а если брать ID, то таблица будет без null
Аноним 19/12/19 Чтв 22:24:42 155138121
>>1551377
> У тебя в LIST_ID значения 2 нигде нет
Оно есть в list.ID, от него уже можно плясать
Аноним 19/12/19 Чтв 22:26:22 155138222
>>1551377
> LIST_ID  
Вместо LIST_ID в последней таблице (с результатом) можно записать просто ID (я неправильно столбец назвал)
Аноним 19/12/19 Чтв 22:55:33 155139323
>>1551347
>вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя"
> в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя

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


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 , без вариантов, а потом нам ещё высирают пол абзаца условий, которые к групировке не имеют ни какого отношения.

Но я б таких пидоров хитровыебаных нахуй слал, непонятно что они в задаче хотят, так это еще на минуточку вакансия начального уровня.
Аноним 19/12/19 Чтв 22:58:43 155139624
>>1551269
А как вообще может получится null, если все возможные значения list.ID(=main.LIST_ID) имеют соответствующее значение LIST_VAL?
Аноним 19/12/19 Чтв 23:47:53 155144225
>>1551393
Сейчас специально на Adventure Work попробовал написать схожий запрос, и упёрся как раз в то о чём я говорил - либо делаем групировку по товарам, либо лепим подзапросами всю эту парашу с ндс. Т.е. либо 3 таблицы с тремя групировками, либо одна с групировкой по группе товаров, и с агрегациями в шапке.
Аноним 20/12/19 Птн 11:49:04 155162926
Стикер (191Кб, 362x346)
362x346
Как в Mysql посчитать count вместе с group by? Нужно именно количество строк в целом, group by использую чтобы удалить дубли при джоине.
Аноним 20/12/19 Птн 11:50:39 155163127
>>1551179
Только сейчас дошло, что это рарджпег
Аноним 20/12/19 Птн 12:09:04 155163528
Аноним 20/12/19 Птн 12:10:10 155163629
>>1551635
Только учти, что строки, содержащие null, тоже посчитает
Аноним 20/12/19 Птн 12:18:35 155164330
>>1550992

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

Потому как на ORM подобная бизнес-аналитика примерно в такие системки и выливается, поскольку ни на что сложнее крудов он не заточен.
Аноним 20/12/19 Птн 12:20:50 155164531
итак давайте подумаем как сделать последовательность в монгоДБ, без function, и главное атомарное решение с без глюков если это выполняется в 100000000 потоков.

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

2)
i.seq = list.IndexDocumentCount()
insert(i)

Аноним 20/12/19 Птн 12:21:24 155164632
>>1551643

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

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

Аноним 20/12/19 Птн 12:23:50 155164833
>>1551645

Вам же пидоркам челастым транзакции завезли в ваше говно, хули ноете?
Аноним 20/12/19 Птн 12:32:05 155165234
>>1551648
не работают на 2 типа
Аноним 20/12/19 Птн 13:05:18 155167935
>>1551635
Он считает count на группу, а мне нужно общее количество.
Аноним 20/12/19 Птн 13:10:22 155168436
>>1551679

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

select count (⋆) from (текст запроса)
Аноним 20/12/19 Птн 13:15:35 155168737
>>1551679
sum(count(*)) ?
Сильно не бейте
Аноним 20/12/19 Птн 16:58:10 155182938
SELECT DISTINCT model
FROM max_price
WHERE price >= ALL (SELECT price FROM max_price)

Аноны, я чет не совсем понимаю как вот это работает
>= ALL
т.е. он сравнивает является ли price больше всех значений в таблице или равно наибольшему значению?
Аноним 20/12/19 Птн 17:13:00 155184239
>>1551629
Чтоб было TRUE нужно чтоб все значение таблицы были =>
Аноним 20/12/19 Птн 18:00:22 155186740
>>1551829
Выражение вернёт true если
price будет больше или равно всех значений в селекте
Аноним 21/12/19 Суб 01:00:45 155224541
>>1551679
Блядь, так засунь в Group By свой айдишник. Тогда количество групп у тебя ровняться количеству строк в таблице, не?
Аноним 21/12/19 Суб 12:04:54 155247542
>>1550921 (OP)
>-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания
>-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
Прошу дать ответ.
Аноним 21/12/19 Суб 13:07:02 155255343
>>1552475
1. Её никто не написал либо кому-то потом было лень её копипастить?
Аноним 21/12/19 Суб 14:00:06 155268044
2c82d1e3476d309[...].png (228Кб, 600x600)
600x600
В обще есть такая таблица
Фамилия | Год |Зарплата
Иванов | 2017 | 5000
Иванов | 2018 | 10000
Петров | 2017 | 7000
Петров | 2018 | 6000
Сидоров | 2017 | 5000
Сидоров | 2018 | 6000
Как выбрать отсюда записи, у которых зарплата в 2018 больше чем в 2017? Я думал сделать джоин с самим собой, но таблица огромная, примерно на миллион записей(много годов), в общем даже с индексом по фамилии это пиздец долго происходит, можно ли как-нибудь через сделать подзапрос?
Аноним 21/12/19 Суб 15:24:35 155282045
В вакансиях просят указать уровень владения sql.
Я умею писать процедуры в T-SQL, знаю как работают аналитические ф-ции, могу читать план запросов и немного их оптимизировать.
Какой у меня уровень?
Аноним 21/12/19 Суб 15:24:57 155282146
>>1552820
>В вакансиях
В вакансии*
Аноним 21/12/19 Суб 15:26:16 155282547
>>1552680
Нуборешение: заджоинить выборку по 2018 с выборкой по 2017 и вывести записи с нужным условием.
Аноним 21/12/19 Суб 15:27:42 155283048
>>1552680
>можно ли как-нибудь через сделать подзапрос?
Два цте по городу и фамилии
>>1552825
Вот етот успел вперёд меня.

Но, я думаю, что тебе это не поможет.
Аноним 21/12/19 Суб 15:28:27 155283249
>>1552830
>городу
цте с гроуп бай по году и фамилии*
Аноним 21/12/19 Суб 15:29:58 155283550
>>1552820
Я тут на тренинги записался, по тамошним критериям:
Средний: хорошие теоретические знания, практические навыки
Продвинутый: отличные теоретические знания, практические навыки, опыт работы более 1 года
Аноним 21/12/19 Суб 15:34:10 155284151
Аноним 21/12/19 Суб 16:07:02 155288452
>>1552830
>>1552841
Если это Common Table Expressions, то уже нашёл и читаю, спасибо.
Аноним 21/12/19 Суб 16:21:01 155289353
изображение.png (4Кб, 285x164)
285x164
изображение.png (152Кб, 620x349)
620x349
>>1552884
>Common Table Expressions
Бля, чото тоже попробовал не пойму как сделать


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




SELECT*
FROM Salary_total
Аноним 21/12/19 Суб 16:25:49 155290254
>>1552893
У тебя хоть зарплата NULL, а у жабаскриптеров вообще undefined
Аноним 21/12/19 Суб 17:02:49 155296255
>>1552680

В качестве решения не подходит тот факт, что данные за эти года меняться не будут и их можно вынести в отдельные таблицы? Таблица зарплат за 2017. Таблица зарплат из 2018.
Аноним 21/12/19 Суб 17:37:01 155299856
tom-kruz-mem-sm[...].jpg (39Кб, 500x333)
500x333
>>1552962
Ну вынесешь ты, а толку? Чтобы сравнить нужно будет джоинить обратно
Аноним 21/12/19 Суб 20:19:28 155316457
>>1552680
Вот запрос без 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)
Аноним 21/12/19 Суб 20:30:20 155316858
Аноны, а какие есть способы горизонтального масштабирования RDMBS? Т. е., например, есть у меня SQL-база, и она уже слишком большая/медленная, а на железном уровне я не могу ни добавить места под базу, ни заменить SSD на более быстрый, но могу добавить новый сервак. Как с минимальными временными затратами выйти из такой ситуации? Считаем, что и база, и запросы уже оптимизированы по-максимуму.
Аноним 21/12/19 Суб 20:35:17 155316959
>>1553168
Бэкапишь базу и восстанавлиаешь ее на новом сервере.
Аноним 21/12/19 Суб 20:44:30 155318560
>>1553168
Mpp базы данных погугли. Если не брать готовые решения, то некоторые умельцы прикручивали шардирование к postgres. Быстро скорее всего ни как. Только если структура данных позволяет, можно архив отделить, историю, но это не совсем горизонтально. Кратко - суть шардирования, распределять данные в зависимости от значения по разным сервакам.
Аноним 21/12/19 Суб 21:01:49 155321461
>>1552998

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

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

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

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

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

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

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

Профессионалы, обоссыте если я хуеты написал, главно не бейте.
Аноним 21/12/19 Суб 21:10:34 155323762
>>1553214

Кончена разметка как бесит эта борда.
Аноним 21/12/19 Суб 21:33:14 155327563
Аноним 21/12/19 Суб 21:35:23 155328864
>>1553214
Ну это говно и палки, куча лишних таблиц, куча лишних преобразований. А если у него доля записнй 2017-2018 высокая? Вон там выше анон изящный ответ зухярил
Аноним 21/12/19 Суб 21:45:17 155331165
>>1552680
>В обще есть такая таблица.
>Как выбрать отсюда записи, у которых зарплата в 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
Аноним 21/12/19 Суб 21:49:14 155331866
Код на VB6.PNG (237Кб, 1077x3650)
1077x3650
И рисунок. Хотя код отобразилося верно.
Аноним 21/12/19 Суб 22:02:06 155332967
>>1553311

Ебануться.

>>1553288

Согласен, классное решение. Я про это >>1553164 Ты тоже ведь?
Аноним 21/12/19 Суб 22:27:07 155335668
>>1553329
Да, не про пассаж от мамкиного программиста же
Аноним 22/12/19 Вск 13:59:55 155367269
>>1552835
Ты конкретизируй, мань.
Аноним 22/12/19 Вск 15:48:22 155376570
>>1553672
Средний у тебя уровень.
Аноним 22/12/19 Вск 16:17:25 155379271
>>1553765
Так у меня больше года опыта работы.
Аноним 22/12/19 Вск 17:29:27 155386272
>>1553792
Тогда есть опыт 3+ лет с минимум одним законченным крупным проектом с и использованием ключевых навыков?
Аноним 22/12/19 Вск 17:38:20 155387673
>>1553862
У меня есть опыт с твоей мамкой чё пристал зануда?
Аноним 22/12/19 Вск 18:53:40 155393174
бамп
Аноним 23/12/19 Пнд 13:16:50 155451475
image.png (38Кб, 1173x686)
1173x686
image.png (43Кб, 1115x730)
1115x730
image.png (40Кб, 1163x641)
1163x641
>>1550921 (OP)
MS SQL
В таблицу добавил новое поле "Genre", оно не должно быть нуллом, но только в EDIT нет колонки Genre, что делать?
Аноним 23/12/19 Пнд 13:17:46 155451576
image.png (5Кб, 220x119)
220x119
image.png (8Кб, 617x176)
617x176
>>1554514
Блять, я другие пикчи заливал
Аноним 23/12/19 Пнд 13:18:56 155451677
Аноним 23/12/19 Пнд 13:21:03 155451778
image.png (8Кб, 679x130)
679x130
>>1554516
Да, сори что заспамил.
Ну заодно спрошу, чё с вопросиками делать? Когда ручками пишу запросы, кодировка сломана
Аноним 23/12/19 Пнд 16:51:32 155478679
Кто нибудь брал специализацию на курсере по Data Warehousing? Стоит того?
Аноним 23/12/19 Пнд 17:51:04 155483480
>>1554517
Collation поменять на кириллицу, если еще не поменял.

И инсертить в nvarchar-колонку надо не
'Говно',
А
N'Говно'
Аноним 24/12/19 Втр 09:32:15 155530381
Screenshot20191[...].png (36Кб, 623x317)
623x317
Вот у меня например после джоина таблицы с самой собой такая хуйня вылезает, казалось бы сделать GROUP BY по имени чтобы убрать повторы, но тогда salary_2017 становится NULL, как сделать чтобы salary_2017 остался не нулл? Нагуглил GROUP BY COALESCE, но он все равно оставляет один NULL.
Аноним 24/12/19 Втр 09:40:41 155530782
Аноним 24/12/19 Втр 09:58:29 155531683
>>1554834
>Collation
Не нашёл где это, но с N'Говно' помогло! Спасибо, анончик ;3
Аноним 24/12/19 Втр 10:46:17 155535884
>>1555303
Покеж код, интересно посмотреть шо ты там строишь.
Аноним 24/12/19 Втр 15:02:08 155549585
image.png (53Кб, 1149x678)
1149x678
Уникальные ID не надо делать? Вот как мне связь многим ко многим правильно тогда реализовать. Книги и покупатели. По какому общему признаку вообще можно их джойнить?
Аноним 24/12/19 Втр 15:39:44 155555586
>>1555495
У тебя ещё одной таблицы не хватает, с заказами, которое и сводит вместе покупателя и товар.
Аноним 24/12/19 Втр 15:42:20 155555987
Аноним 24/12/19 Втр 15:45:48 155556288
изображение.png (11Кб, 784x722)
784x722
Аноним 24/12/19 Втр 15:48:51 155556789
>>1555495
Для создания связи многие ко многим требуется дополнительная таблица.
Аноним 24/12/19 Втр 16:01:48 155557890
Аноним 24/12/19 Втр 16:07:24 155558491
image.png (46Кб, 617x417)
617x417
image.png (3Кб, 267x81)
267x81
>>1555555
Ты гет взял.
Спасибо, а то я видимо неправильно связал, у меня была 3тья таблица, не понял чё с ней делать
Аноним 24/12/19 Втр 16:48:32 155560992
>>1555578
>>1555584
Лол, не понял с начала и потом не понял. Ну раз у нас гет в тхреде, щас заживем, за неделю будем в бамплимит улетать.
Аноним 24/12/19 Втр 17:08:43 155562093
Screenshot3.png (39Кб, 666x488)
666x488
как эту ебаную подсказку в жабе включить?
заебало вручную прописывать это говно ебаное
Аноним 24/12/19 Втр 17:16:05 155562594
>>1555609
Я по такому случаю АдреналинРаш открыл
Аноним 24/12/19 Втр 17:26:53 155563595
>>1555625
Ууу, у меня от энергетиков изжога. Лучше уж колу купить
Аноним 24/12/19 Втр 18:46:54 155567596
>>1555635
Он не кислый совсем
Аноним 24/12/19 Втр 23:09:16 155595597
>>1555584
Ну смотри, чтобы связать список книг и список покупателей, тебе нужно как-то указать кто какие книги купил. Можно , конечно, в списке покупателей каждому покупателю добавить список книг которые он купил (и каждой книге - купивших её покупателей). Но несложно догадаться, что это не кошерно. Поэтому умные люди придумали делать таблицу, фиксирующую покупку - ид_покупки, ид_покупателя, ид_книг etc - и вот она связь многие ко многим посредством ещё одной таблицы.
Подробнее погугли «нормальные формы» вроде как
Аноним 25/12/19 Срд 22:44:45 155707098
Как работает TOP?

Допустим у меня несортированая таблица, делаю простой селект с топом, что произойдет?
1) Достанет всю таблицу, и отдаст мне 10 строк
2) Посмотрит 10 строк, а остальное смотреть не будет
Аноним 26/12/19 Чтв 07:50:57 155733099
>>1557070

А так ли это важно с учётом того, что в MySQL есть кеширование. Пока таблица, к которой ты делаешь запрос, не изменилась, ты будешь получать результат SELECT-а мгновенно из кеша.
Аноним 26/12/19 Чтв 11:25:38 1557389100
>>1557070
Вариант 2, разумеется
Аноним 26/12/19 Чтв 12:51:44 1557448101
>>1557070
>строк
Сжечь отступника на реляционном огне
Аноним 26/12/19 Чтв 13:01:07 1557461102
Сап. Не нашёл треда по NoSQL, извиняйте.

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

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

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

Или смотреть вообще в другую сторону, какие-нибудь timeseries-базы?
Аноним 26/12/19 Чтв 19:19:51 1557834103
>>1557461

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

Алсо, если у тебя высокая нагрузка, может не менять базы, а использовать решения для балансировки нагрузки?
Аноним 26/12/19 Чтв 22:17:31 1558199104
>>1557461
Можно попробовать кафку как персистентное хранилище юзать.
Cassandra вроде как на запись быстрая, но не "минимальная"
Аноним 26/12/19 Чтв 22:40:58 1558237105
>>1557834
Суть именно в том, что один бэк совмещается с одной БД - нужен масштабируемый сервис-приёмник-данных. При увеличении нагрузки план в масштабировании всего сервиса, а не только базы. Монго - очень уж жирная, 150 МБ образ (alpine, видимо, для слабых), тонны коллекций, вот это всё. Редис привлекал именно свой минималистичностью.

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

В общем, вопрос пока что закрыт, но, в будущем, может открыться вновь.
Аноним 26/12/19 Чтв 22:53:44 1558256106
>>1558237

Нуок. Удачи тебе там, давай шоб всё заработало, потом допилишь.
Аноним 28/12/19 Суб 01:18:23 1559284107
изображение.png (37Кб, 686x714)
686x714
Читал книжку, увидел такой вот жоин, слегка охуел
Аноним 28/12/19 Суб 10:52:40 1559419108
>>1559284
> Читал книжку, увидел такой вот жоин, слегка охуел
Лол, это еще совсем хуйня.
Аноним 28/12/19 Суб 13:41:33 1559513109
>>1559284
Конечно, ты охуел, это же говно какое-то. Еще и в книжке какой-то написано. Предлагаю такой вариант, который то же самое достанет, только записано короче и работает быстрее.
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’)
Аноним 28/12/19 Суб 13:55:21 1559522110
изображение.png (398Кб, 638x359)
638x359
>>1559419
Ну я дибиловат

>>1559513

Нет твой запрос достанет клиентов купивших один из четырёх, а нужно клиента купившего все четыре
Аноним 28/12/19 Суб 23:59:47 1560009111
>>1559284

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

Интересно, предложит кто-то вариант получше?
Аноним 29/12/19 Вск 00:48:50 1560050112
>>1559522
Да пфф, прост не заметил, особо много не поменяется

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
Аноним 29/12/19 Вск 01:07:59 1560064113
>>1560050
А что поменялось то?
IN же же ОДИН ИЗ. У тебя по прежнему вернёт тех кто просто купил одно их говен. А надо вернуть тех кто купил все четыре говна за раз.


>>1560009
Ну там в книжке есть ещё один вариант решения, покороче, и вроде как попроизводителней.
Аноним 29/12/19 Вск 01:16:22 1560066114
image.png (24Кб, 630x367)
630x367
>>1560050
Лучше сначала group by, чтобы join легче был.

>>1560064
>А что поменялось то?
having, который оставляет только CustomerId с 4 разными ProductName.
Аноним 29/12/19 Вск 01:23:20 1560071115
>>1560064
Хм да, впринципе разумно. Сначало хотел возразить что товаров то больше, но мы же их отфильтровали. блять а зачем эти пидоры тогда воротят это говно на три абзаца с жоинами

Аноним 29/12/19 Вск 01:43:04 1560078116
>>1560071
Потому что having не использует индексы, так что может быть вопрос в производительности.
Но даже если нужно использовать индексы, то лучше юзать
Where exists
and exists
And exists
And exists
Для каждого из 4 продуктов, чем тот калл с джойнами. Советую сменить книжку.
Аноним 29/12/19 Вск 01:45:16 1560079117
>>1560066
>лучше сначала
Двачую.
Я еще иногда пишу
Group by только по c.CustomerId
А все остальное запихиваю в max:
Select
C.CustomerId,
Max(c.CuatomerFirstName),
Max(c.CustomerLastName)
From ...
Group by c.CustomerId
Аноним 29/12/19 Вск 02:02:14 1560081118
>>1560079
А за что конструкция MAX отвечает?
Аноним 29/12/19 Вск 02:10:01 1560083119
>>1560081
Это просто агрегирующая функция, которую можно к строкам применять - максимум.
Можно min написать, результат такой же будет.
Она нужна, чтобы не группировать по имени и фамилии записи, они все равно по айдишнику клиента группируются.
Аноним 29/12/19 Вск 02:22:57 1560084120
960x540.jpg (86Кб, 640x360)
640x360
>>1560083
Не знал что так можно через групбай протаскивать дополнительные строки
Аноним 02/01/20 Чтв 17:34:01 1563202121
image.png (41Кб, 933x249)
933x249
Вот это ORACLE мощная.
Время в секундах среднее на различные count() в таблице от 0 до 10кк записей с шагом в 1к, (981 итерация)
Аноним 02/01/20 Чтв 21:12:17 1563384122
>>1563202
Я б посмотрел статистику по другим запросам. И вобще чот прохладная история, малоинформативно.
Аноним 02/01/20 Чтв 21:40:54 1563410123
Аноним 02/01/20 Чтв 22:18:13 1563431124
>>1563384
Да ладно, общеизвестнй факт, что оракл круче MS и My тем более.

Просто нужно иметь в виду, что она и дороже, и жрет больше, и сопровождается хуевее.
Я не фанат, между прочим, считаю говном оракл, но это известный факт, что он эти субд ебет в сраку, поэтому в банках всяких тока его и юзают.
Аноним 02/01/20 Чтв 22:31:55 1563438125
monster-handyman.png (3Кб, 200x173)
200x173
Аноним 02/01/20 Чтв 22:35:10 1563440126
>>1563431
Да я не против но от таблицы попахивает пиздежом, 0,001 на всех запросах, в то время как у конкурентов аремя разное. Либо там кэширование какое-то, либо условия разные.
Аноним 02/01/20 Чтв 22:47:40 1563451127
Снимок.PNG (39Кб, 1310x558)
1310x558
>>1563438
>Scylladb
Первый раз про такое слышу.
ПРедставим, что ты IT-директор и принимаешь решение использовать небесную-лабораторию-баз-данных. У тебя есть 2 чела, которые умеют ее админить и юзать.
Через месяц их хантят и зовут на другой проект, где обещают столько денег, сколько ты им никогда дать не сможешь.

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

Вообще, вижу, очень популярная штука, судя по пикрилу с hh, явно стоит того, чтобы потратить свое время на ее изучение.
Аноним 02/01/20 Чтв 23:01:40 1563467128
>>1563451
Она касандру заменяет.
Аноним 02/01/20 Чтв 23:03:57 1563470129
image.png (96Кб, 1148x671)
1148x671
image.png (110Кб, 1133x656)
1133x656
image.png (99Кб, 1155x661)
1155x661
image.png (98Кб, 1196x634)
1196x634
Аноним 02/01/20 Чтв 23:11:01 1563473130
>>1563470
Ну типо каунт у них ахуенный да, ну вставляет хуже пеонов. Да и третей базой хотя бы марию нужно.
Аноним 03/01/20 Птн 03:49:09 1563570131
Аноним 03/01/20 Птн 09:05:06 1563603132
>>1563570
>data в csv-файлах
Ну вообще-то оракул силен, когда он сам сохраняет записи.
Аноним 03/01/20 Птн 09:25:43 1563605133
>>1563570
Бенчмарк для колоночных бд
Аноним 03/01/20 Птн 11:56:39 1563641134
Макаки и индусы убили мой Myisam...
Аноним 03/01/20 Птн 18:14:33 1563925135
>>1563605
а каунты фулсканом из
>>1563202
для каких бд ёбта?

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

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

Вообще фул скан это чисто для аналитических бд. Макака выбрала какие-то дрищ базы устаревшие. Для таких задач используются движки из моей ссылки. А Оракул сосёт там. Это олтп база.
Аноним 03/01/20 Птн 18:16:32 1563931136
>>1563603
в каких файлах, дебич?
он просто пример привёл размера в коммон формате

там если на любой тест тыкнуть, написано, как он данные в базу загружает
Аноним 03/01/20 Птн 18:47:56 1563952137
>>1563925
>>1563931
Тебе трипкод надо, чтобы все адекваты могли автоскрытие на твое говно поставить.
Аноним 04/01/20 Суб 12:55:30 1564521138
Где можно вот про эту хуйню почитать?
>NOT LIKE '%[^0-9]%'
Аноним 04/01/20 Суб 12:57:08 1564523139
>>1564521
В этом условии, получается он не выведет записи, в которых есть что-то помимо цифр?
А это можно без отрицания сделать?
Аноним 04/01/20 Суб 16:03:59 1564737140
Ребятки, короче, пошел после универа на галеру, а тут вместо божественного MS SQL Server заставляют на PostgreSQL хуячить. И не то чтобы с этим проблемы, но блядь, я что-то не нашел где посмотреть диаграмку баз данных, а эта хуйня в БД с парой сотен таблиц очень выручала у SQL Server'а. Короче, может быть я тупой, но если этого нет из коробки, то как быстро получить эту самую диаграмму?
Аноним 04/01/20 Суб 16:25:16 1564759141
>>1564523
Вобще все в один голос кричат что LIKE говно конструкция, и не стоит её использовать.
Аноним 04/01/20 Суб 18:56:42 1564918142
Аноним 04/01/20 Суб 19:23:53 1564933143
>>1564521
В документации к своей СУБД.
>>1564523
Нет, все строки в которых есть подстрока [^0-9]
>>1564759
> Вобще все в один голос кричат что LIKE говно конструкция
Что? Где?
Аноним 04/01/20 Суб 19:28:11 1564940144
>>1564918
Спасибо. Вроде как то что надо.
Аноним 04/01/20 Суб 19:46:17 1564953145
>>1564918
Он к Муське не подключается, потому что он написан на джаве, а там через jdbc он у нее не понимает timezone, надо в самой субд UTC+3 прописать, это можно несколькими способами сделать.
Аноним 04/01/20 Суб 19:59:40 1564956146
>>1564933
ну слишком дорого по ресурсам, неоднократно слышал из разных источников
Аноним 04/01/20 Суб 20:04:29 1564959147
>>1564956
Всё в этом мире относительно.
Аноним 04/01/20 Суб 20:20:33 1564970148
>>1564959
Я слышал мнение что лайком любую более-менее большую базу можно поставить раком. К слову лучше использовать LEFT, вместо ^
Аноним 04/01/20 Суб 20:21:14 1564972149
>>1564970
а не, со скобками по другому работает, забей
Аноним 05/01/20 Вск 18:53:49 1565662150
Дайте почитать о PSQL что-нибудь?
Аноним 05/01/20 Вск 21:28:43 1565808151
image.png (168Кб, 1279x742)
1279x742
Обосрался ли я в чём-либо, если да, то в чём?
Аноним 05/01/20 Вск 22:05:41 1565833152
>>1565808
Запостил схему без задачи
Обосрался, ясное дело
Аноним 06/01/20 Пнд 02:03:33 1566023153
>>1565833
Ну может из очевидного что-то, типа FK не в ту сторону или тип text вместо какого-то более подходящего для строк с именами и названиями.
Я нуфак совсем, первую свою БД проектирую.
Аноним 06/01/20 Пнд 07:11:39 1566074154
>>1565808
Гендер булевым сделать можно
Аноним 06/01/20 Пнд 10:26:15 1566086155
>>1566074
В булев не поместится четыре варианта.
Аноним 06/01/20 Пнд 11:08:54 1566094156
Аноним 07/01/20 Втр 18:53:13 1567000157
>>1553164
Возник еще вопрос, если нужно вывести зарплату каждого за 2017 и 2018, и гарантировать что они были, что делать?
Вот я добавил group by t.last_name, year чтобы были оба, но тогда having count уже не срабатывает, и вылезают сотрудники которые скажем в 2018 уже NULL, как быть?
Аноним 07/01/20 Втр 20:21:02 1567087158
Видел что иногда используют ?, для подстановки, как правильно называется чтоб можно было почитать по этому вопросу?
Аноним 07/01/20 Втр 21:14:22 1567135159
>>1565808
Ты в чем такую хуевину сделал?

Аноны, а не подскажете, Postgres много ресурсов системы жрет? (Винда)
Аноним 07/01/20 Втр 21:18:24 1567141160
>>1567135
если просто в фоне тарахтит, то не много.
Аноним 07/01/20 Втр 21:55:20 1567171161
>>1567141
А в каком случае много? Не много - в смысле даже меньше вкладки хрома какого-нибудь?
Аноним 07/01/20 Втр 22:09:22 1567184162
>>1567171
да образные 100 метров оперативы. Много если начинаешь работать с базой делать боьлшие инсерты\селекты\итд.
Аноним 07/01/20 Втр 22:35:31 1567194163
>>1567087

Где ты такое видел?
Аноним 07/01/20 Втр 22:37:46 1567197164
Аноним 07/01/20 Втр 22:47:01 1567202165
Аноним 09/01/20 Чтв 01:07:34 1567880166
Сап сиквелач. Хочу сделать запрос к таблице с полями, например, "имя студента", "concat("имя препода", "фамилия препода"), "название урока", "дата проведения" с GROUP BY date, name такой, чтобы если в это время урок случился всего один, то вывести его название, а если их несколько, то вывести строку типа "произошло несколько уроков". HAVING COUNT(date) не помогает, так как все остальные поля не попадают в агрегирующие функции. Если же сделать так, чтоб попадали, то запрос перестаёт работать
Аноним 09/01/20 Чтв 01:21:42 1567887167
>>1567880
Спасибо сосач, я решил эту проблему, сделав тупо SELECT name, MAX(prepod), MAX(urok), date ... GROUP BY date, name HAVING COUNT(urok) = 1 UNION SELECT name, MAX(prepod), 'penis', date ... GROUP BY date, name HAVING COUNT(urok) > 1
Аноним 09/01/20 Чтв 01:30:11 1567891168
15415030182830.gif (416Кб, 600x429)
600x429
>>1567887
Няша, сам спросил, сам ответил, все бы так
Аноним 09/01/20 Чтв 15:47:39 1568180169
image.png (40Кб, 1141x291)
1141x291
Здравствуйте, уважаемые.
Подскажите, хули так процессов Postgres'a много висит.
И че теперь pgAdmin только веб морда?
Десктоп приложением для винды не пользуется уже никто?
Аноним 09/01/20 Чтв 16:48:05 1568252170
>>1568180
В настройках можно задать ограничение на количество процессов.
Аноним 09/01/20 Чтв 16:56:21 1568269171
>>1568180
>И че теперь pgAdmin только веб морда?
Морда, которую мы заслужили. А вот нехуй было сливать индустрию обоссаным веб-дебилоперам, скоро клиенты всего только в виде вебморд будут.
Аноним 09/01/20 Чтв 17:09:48 1568290172
>>1568252
Не подскажешь как это можно сделать?
Аноним 09/01/20 Чтв 18:42:58 1568438173
Аноним 09/01/20 Чтв 19:57:33 1568506174
А как сделать cross join the same table? columns k1, k2 in t1
k1 надо cross join k2
Аноним 09/01/20 Чтв 20:37:04 1568557175
>>1568506
Не надо отвечать, Я сделал.
вы бы все равно не ответили, уроды
Аноним 10/01/20 Птн 11:33:32 1568978176
>>1567000
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
Аноним 10/01/20 Птн 13:24:27 1569020177
Накидайте каких-нибудь сложных задачек на оракл скуль или просто вопросиков, которые вас интересуют, с радостью отвечу. Акцентирую внимание на том, что я большой профессионал только в оракле, с остальными бд работал очень мало.
Аноним 10/01/20 Птн 16:04:49 1569100178
>>1569020
В оракл все еще нейдобно работать с датами?
Аноним 11/01/20 Суб 17:21:53 1570034179
Аноны, в какой-нибудь субдпараше есть встроенный скалярный MAX() ? Чтобы сразу из коробки ебашить запросы типа select max(10,20,30;
Аноним 11/01/20 Суб 18:35:56 1570096180
Аноним 11/01/20 Суб 19:42:58 1570138181
Стыдно признаться, аноны, но я только сейчас узнал про SELECT ... FOR UPDATE

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

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

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

просто отложите все свои дела и прочитайте и только потом уже программируйте. Не будьте как я.
Аноним 11/01/20 Суб 20:29:38 1570188182
>>1570138
Для белых людей ORM всё это делает за них, в коде пишется только `.update(status: :completed)`.
Аноним 11/01/20 Суб 21:04:50 1570233183
>>1570138
Это ещё хуйня. Мне как-то и этого не хватило, пришлось обмазываться DBMS_LOCK.
Аноним 13/01/20 Пнд 15:14:39 1571711184
А из mysql анонимного пользователя удалили чтоли?
Раньше же был, если в имени ''@'%' пустые кавычки указывать.
Аноним 13/01/20 Пнд 19:47:03 1571954185
>>1571711

В MariaDB при установке есть. Я удаляю каждый раз когда ставлю. Вместе с базой test.
Аноним 14/01/20 Втр 09:57:49 1572383186
7EA8F6D5-EA9A-4[...].png (2597Кб, 750x1334)
750x1334
Вот я попал

Живу в Москве

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

120-150 на руки

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


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


То и то решаю, но отказы, че делать, хз
Аноним 14/01/20 Втр 10:18:10 1572397187
>>1572383
А как этот запрос сделать?
Аноним 14/01/20 Втр 10:44:00 1572420188
>>1572397
А как понять, что от тебя хотят в задании?
Я запрос мб и написал бы, но че-то в логику не въезжаю.
Если расскажете, напишу вам запрос.
Аноним 14/01/20 Втр 10:50:55 1572426189
>>1572420
А понял
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

Такие дела, это вам не сиськи мять
Аноним 14/01/20 Втр 10:59:15 1572430190
>>1572426
Быстро ты

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

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

Твой метод попробую для себя разобрать, как доберусь до базы
Аноним 14/01/20 Втр 18:00:11 1572718191
Аноним 14/01/20 Втр 20:14:57 1572817192
>>1572383
>>1572426

Для себя сделал вывод: плохо не знать хотя бы в теории какие есть в mysql функции и что они делают.
Аноним 14/01/20 Втр 22:54:54 1572967193
>>1572383
Я что-то тоже втыкаю уже минуты три.
Что они хочет?
>максимальное и минимальное значение группы
Чего блять? Как это к примеру относится?
Аноним 15/01/20 Срд 15:05:26 1573254194
>>1572967
Глупенький, там идут числа по порядку, но в некоторых местах порядок нарушается. Пока порядок не нарушен, это группа. Если после числа не идет следующее по порядку число, то он одиночка в своей собственной группе.
Аноним 16/01/20 Чтв 02:10:24 1573912195
Есть две таблицы, writers (id) и books (writer_id, publication_year). Связь один-ко-многим. Столбец publication_year может содержать одно из 50 значений от 1970 до 2019. Как из этих данных узнать, сколько авторов издали свою первую книгу в каждом из обозначенных годов?
Аноним 16/01/20 Чтв 05:15:29 1573942196
>>1573912
SELECT writer_id, MIN(publication_year) FROM books GROUP BY writer_id;
Аноним 16/01/20 Чтв 07:57:47 1573954197
Всем привет!
Анончики наверно не совсем по тематике, появилась необходимость автоматизировать работу, сменив эксельку на что то более гибкое.
с чего начать? где искать специалиста который занимается разработкой ПО, сколько это может стоить? ( усредненно)

Сейчас работаю в эксель +DataExpress, но знаний чтобы допилить и сделать все в одном месте не хватает.
Аноним 16/01/20 Чтв 08:52:04 1573969198
Аноним 16/01/20 Чтв 09:03:26 1573973199
>>1573954
> сменив эксельку на что то более гибкое.
с чего начать?
С изучения питончика.

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

> сколько это может стоить? ( усредненно)
100.
Аноним 16/01/20 Чтв 09:05:29 1573974200
>>1573973
я не планирую сам делать программу, просто нужно найти кого то умеет. на удаленную работу.
Спасибо попробую покурить сайты
Аноним 16/01/20 Чтв 09:25:09 1573979201
>>1573942
Ему не первый год для каждого автора, ему надо publication_year, count(writer_id) ... group by publication_year
Аноним 16/01/20 Чтв 09:47:33 1573993202
>>1572967
Ну так ты понял или нет?
Аноним 16/01/20 Чтв 10:23:02 1574006203
>>1573979
Тоже мимо.
>сколько авторов издали свою первую книгу в каждом из обозначенных годов
Значит, надо
SELECT y, count(id) FROM (
SELECT writers.id, MIN(publication_year) as y
FROM books JOIN writers
ON books.writer_id = writers.id
GROUP BY writer_id
) b
GROUP BY y;
Аноним 16/01/20 Чтв 21:10:35 1574583204
Это что-то по сисадминству?
Аноним 16/01/20 Чтв 21:26:39 1574612205
>>1574583
Это что-то по данным. Сисадмины этим не занимался, разве что если они ещё и DBA.
Аноним 17/01/20 Птн 06:37:35 1575100206
17/01/20 Птн 15:27:34 1575437207
>>1550921 (OP)
Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гугле
17/01/20 Птн 15:28:55 1575441208
>>1575437
Как называется если он существует способ хранения записей, при котором при обновлении данных не обновляется существующая запись а создается новая с меткой времени актуальная запись-самая свежая, и где об этом почитать? я не смог придумать корректный запрос в гугле
Так более читаемо
Аноним 17/01/20 Птн 15:35:31 1575452209
17/01/20 Птн 16:26:21 1575534210
>>1575452
ок, спс scd тип 4 не зашкварный?
Аноним 17/01/20 Птн 17:01:36 1575601211
>>1575441
Пиздос, я всегда удаляю затираю данные редактированием, а в сервисах, написанных вот такими петухами, предыдущее значение навсегда останется.
Аноним 17/01/20 Птн 17:14:03 1575618212
>>1575441
Ещё вариант "версионирование данных".
Аноним 17/01/20 Птн 17:20:23 1575620213
Аноним 17/01/20 Птн 17:44:52 1575628214
>>1575601
А когда дрочишь, сперму свою тоже пробуешь каждый раз?
Аноним 17/01/20 Птн 17:53:20 1575634215
>>1575601
>Петухи пишут сервис
>Ой, кто там в системе поменял значение? Какое вчера было в системе?
>Сейчас посмотрю, скажу

>Сервис пишет мастер баз данных из /pr, который всех называет петухами и не соблюдает принципов историчности
>Ой, ГАЛЯ, кто там поменял значение? Какое вчера было в системе?
>Сейчас, надо восстановить бэкап базы, сейчас-сейчас, попредолимся пару часов, ой, ай, бэкап только на 23:00
>Жидко пернув, увольняется и идет искать новое место, где не будут предъявлять какие-то непонятные требования, типа ИСТОРИЧНОСТИ к его системам

Аноним 17/01/20 Птн 18:43:50 1575662216
>>1575634
Нормальные люди пишут при необходимости хранить ИСТОРИЮ пихают логи изменений в какой-нибудь эластик, а не засирают этим говном базу.
Аноним 17/01/20 Птн 20:30:10 1575739217
>>1575662
Ну конечно, нормальные люди только так и делают.
Ты в каждый проект еластик пихаешь? Дай угадаю, ты из тех, кто без еластика/докера/нод жс/монго и пр. работать не умеет, да?

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

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

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

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


Ну ничего, научишься, там, глядишь, и на повышение пойдешь.
Аноним 17/01/20 Птн 20:35:42 1575745218
>>1575739
Просто он ниасилил нормализацию.
Аноним 17/01/20 Птн 21:04:03 1575782219
Чем дата-саентист занимается?
Аноним 17/01/20 Птн 21:08:50 1575787220
>>1575782
Анализом данных, больше всего это похоже на статистику. К базам данных отношение имеет лишь косвенное.
Аноним 17/01/20 Птн 21:15:26 1575796221
Аноним 17/01/20 Птн 21:49:06 1575835222
Аноним 17/01/20 Птн 23:33:49 1576001223
Парни, глупый вопрос, но будьте добры помочь. Требуется хранить файл и его хеши. Хэшей тысячи и не всегда (а может и часто для некоторых) их значение известно. Как лучше реализовать - одна общая таблица со всеми мысленными и немысленными хешами(и половина таблицы тупо null) или дохрена таблиц вида id -> hash_value, но уже без null?
Лучше на стыке расширяемости, скорости и более-менее несложности кода. Спасибо заранее.
Аноним 17/01/20 Птн 23:34:30 1576004224
>>1576001
Их значение неизвестно*.
Аноним 18/01/20 Суб 00:01:00 1576052225
>>1576001
>одна общая таблица со всеми мысленными и немысленными хешами
Ну давай разбирать по частям тобою написанное. Если твои хэши — это CRC32, то каждый из них занимает 32 бита, а возможных вариантов 232, т.е. пустая таблица всех значений займет 16 ГБ. Если же хэши, например, sha256, то каждый занимает 256 бит, а возможных вариантов 2256, тогда пустая таблица таких значений займет 70-значное число ГБ. Дисками уже закупился?
Аноним 18/01/20 Суб 00:19:38 1576063226
>>1576052
Догичное объяснение, всё понятно. Удачи.
Аноним 18/01/20 Суб 14:52:53 1576427227
На сколько я знаю VARCHAR места не занимает, если в нем нет данных. Да и вообще любое поле не занимает места на диске, если оно NULL. Создатели движков БД не идиоты ведь.
Аноним 18/01/20 Суб 15:31:44 1576458228
гайз, что почитать по базам? опыт есть, но чувствуется то хромает теория
Аноним 19/01/20 Вск 17:20:26 1577712229
Здравствуйте, как реализовать стоимость по дням недели и праздникам ? Например,жилье на турбазе стоит 1000 р. по будням, в выходные 1500, на праздники другая цена. А если вообще не сезон скидку сделать.
Аноним 19/01/20 Вск 21:13:05 1577957230
>>1577712

Я бы на твоем месте копнул в сторону как вообще реализуются скидки. Мне кажется это уже на столько заезженная тема, что по ней есть бест практики на любой вкус.
Аноним 19/01/20 Вск 22:19:17 1578016231
>>1577712
id | name | workday_price | holiday_price | nebo_price | allah_price
Аноним 19/01/20 Вск 22:28:11 1578043232
>>1578016
Ага, а завтра у тебя с понедельника по четверг стоит 100 р, в пятницу 150, а выхи 300, как будешь делать?
Аноним 19/01/20 Вск 22:38:53 1578061233
>>1578043
Раз уж цена меняется по желанию левой пятки, то только так:
id | product_id | date | price

А на уровне логики каждый раз инсертить по несколько записей на будущее.
Аноним 19/01/20 Вск 22:47:03 1578074234
>>1578061
Двачую, вот так правильно.
Аноним 19/01/20 Вск 22:56:01 1578084235
>>1578061
ну смари цена будет 1488 руб с 01.01 по 12.01. и дичь получается
Аноним 19/01/20 Вск 23:02:49 1578093236
>>1578084
Тогда можно сделать start_date и end_date.
Правда, вопрос в том, как сделать диапазоны непересекающимися. Можно написать тупой триггер, находящий самую близкую дату и чекающий, что всё норм.

Ещё вариант - только одно поле с датой, означающее "начиная с такой-то даты цена такая".
Аноним 20/01/20 Пнд 19:34:25 1578894237
>>1578093
>Начиная с какой даты
best вариант, обеспечивает и гибкость, и гарантирует, что не будет пересекающихся диапазонов.
Аноним 21/01/20 Втр 20:19:38 1579733238
C2400795-DC49-4[...].jpeg (109Кб, 984x1200)
984x1200
Братья-аноны, спасайте: где скачать пикрилейтед? В гугле не забанен, но найти не могу.
Аноним 21/01/20 Втр 20:56:00 1579794239
bt.png (88Кб, 962x844)
962x844
>>1579733
>найти не могу
Поищи в пикрелейте. Живые там ссылки проверять я конечно же не буду.
Аноним 21/01/20 Втр 22:23:24 1580013240
>>1579794
Первая же ссылка рабочая. Лучи добра тебе, анон
Аноним 22/01/20 Срд 00:40:21 1580220241
>>1575437
Таблица называется полносрезной.
Способ хранения - сырые не нормализованные данные. Есть куча способов, например ты можешь просто добавить столбец с датой загрузки, есть что-то похитрее. https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE_%D0%BC%D0%B5%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D0%B5%D1%81%D1%8F_%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D1%8F.
В основном об этом говорят, когда речь идёт о всяких больших данных
Но всё это довольно элементарно какие нахуй книжки, лол?
мимо инженер данных
Аноним 22/01/20 Срд 00:41:51 1580223242
Аноним 22/01/20 Срд 01:32:39 1580266243
>>1580223
Инженер больших данных, у вас спойлеры фрагментировались по всем постам, срочно пересоберите свой текст.
Аноним 22/01/20 Срд 02:13:34 1580278244
давай те БД для файлов
что нужно
1) инсерт и гет по id
2) автобалансровка , типо заканчивается место , добавляю еще компьютер и всё само настраивается
3) поддержка стриминга , типо могу в вебе перематывать
Аноним 22/01/20 Срд 02:16:02 1580279245
>>1580223
>какие нахуй книжки, лол?
какие нахуй книжки, лол?
Я уже сделаль тип 4 ну рили хуй нагуглишь
Аноним 22/01/20 Срд 09:53:05 1580434246
>>1575662
Тебе могут быть нужны старые данные не только на случай когда надо что-то срочно посмотреть, а как часть бизнес-логики приложения.
Аноним 22/01/20 Срд 09:53:48 1580435247
Аноним 22/01/20 Срд 11:50:46 1580498248
>>1580435
не нашел где скачать
Аноним 22/01/20 Срд 18:07:41 1580892249
>>1580279
А ты не то чмо, которое инженеров больших данных свитерами называешь?
Аноним 22/01/20 Срд 23:34:11 1581147250
>>1580892
я вкатывальщик еще не называю а надо?
Аноним 23/01/20 Чтв 22:57:32 1581910251
Привет всем.
1)Итак нужна БД ключ значение подойдет
2) будет 1 таблица , инсерт и get по id
3) Любая скажите ? а хуй там вот такое требование
Нужна БД которое займет минимально диска.
Попробовал совета одного "топ программиста" монгоДБ , размер чуть ли не в 3 раза больше стал чем данные лежали в .txt
Аноним 23/01/20 Чтв 22:58:57 1581913252
Аноним 24/01/20 Птн 00:07:11 1581957253
>>1581910
>будет 1 таблица , инсерт и get по id
а чем собственно .txt файлы не устраивали? их можно гитом бэкапить, очень удобно
Аноним 24/01/20 Птн 00:34:12 1581973254
>>1581957
getby id нельзя сделать , точнее нужно это делать моментально . писать код свой не хочу
>>1581913
давай свои идентификаторы , если выйдет на х2 больше , чтобы мог тебя обосать
Аноним 24/01/20 Птн 00:47:59 1581982255
Аноним 24/01/20 Птн 02:13:33 1581994256
>>1581973
>нужно это делать моментально
моментально это сколько мс? если у тебя данных не дохуища, а в пределах гига, создай раздел в оперативке (tmpfs) и храни этот файл там. скорость такая будет, что ты охуеешь. если хочешь, чтобы знакомые "топ программисты" не кекали от реализации, замени файл на memcached или redis. запомни главное: соединяться с хранилкой ты должен не по сети, а через сокет. преобразование данных в пакеты и обратно - это такой тупейшний оверхед, что остальное уже не имеет значения.
Аноним 24/01/20 Птн 16:44:42 1582334257
>>1581982
шот гуглица только ктатащина , нету мануалов на не узбекском языке, и .тд.

>>1581994
21 тб
дальше первого предложения не читал
Аноним 24/01/20 Птн 18:49:50 1582434258
>>1582334
21 терабайт. В .txt.
А вы знаете толк, мсье.

Бтв любая база займет ощутимо больше места из-за организации хранения информации. Типа
Аноним 24/01/20 Птн 19:07:28 1582444259
>>1582434
Последнее слово хуй пойми откуда взялось, сорян.
фикс
Аноним 24/01/20 Птн 22:02:05 1582515260
Привет, гайз.
У меня тут появилась нужда сделать так, чтобы при помощи SQL процедуры как-то на удалённой машине вызвать завершение определённого процесса в Windows (ну или хотя запустить скрипт уже на компе, который сам это сделает, не суть).

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

Аноним 24/01/20 Птн 22:04:46 1582521261
>>1582515
Тьфу, случайно отправил, не дописав.
Так вот, может есть какие-то возможные способы такое провернуть?
Или костыли?
Суть в том, что есть процедура, которая проводит некоторые проверки, и при условии, что некоторый параметр = true, то надо убить процесс на компе, который стриггерил процедуру.
Вот примерно так.
Аноним 24/01/20 Птн 22:33:28 1582536262
>>1582334
>21 тб
в таком случае я предлагаю сделать по принципу "работает - не трогай"
Аноним 25/01/20 Суб 01:56:10 1582635263
>>1582521
прямо голым SQL? ничего нельзя разворачивать дополнительно?
Аноним 25/01/20 Суб 05:47:53 1582649264
>>1582635
А какое решение ты можешь предложить для развёртывания?
Смотри.
Есть комп, на котором триггерится прожка на С#, которая при определённых условиях блочит его полностью.
Я делаю решение, которое позволит ответственному человеку разблокировать комп, введя логин и пароль.

Проблема в том, как загасить процесс программы на С#, используя SQL и какие-то может быть костыли?
Аноним 25/01/20 Суб 06:46:32 1582657265
>>1582649
Ну пускай твоя шарповная прога после блокировки компа начинает раз в пять секунд селектить табличку (например: id, user, time) и разблокировывать компутатор, а твой мальчик будет дергать процедуру, которая делает запись в эту табличку, права на нее дай только ему.
Аноним 25/01/20 Суб 10:31:54 1582690266
>>1582334

> 21 тб

Сомневаюсь, что всеми этими данными пользуются каждый день. Наверняка их можно разбить по годам по разным базам и какие-то базы положить на ssd, а какие-то на обычные диски.
Аноним 25/01/20 Суб 13:50:30 1582741267
>>1582690
каждый день. все данные задействованы
>>1582434
понятное дело что займет более , в том и вопрос какая минимально
>>1582536
незя, нужен поиск (читай начальный вопрос)

Аноним 25/01/20 Суб 14:06:29 1582750268
>>1582649
Написать ты должен не прожку, а службу

Также советую гуглить Windows api Unlock Event .net
Аноним 25/01/20 Суб 14:14:18 1582753269
>>1582741
Тогда делай свои индексы, раз тебе нужно минимум места и поиск реализовать.
Хотя можно попробовать покурить оракловые exteral table и их аналоги. Поиск есть, модификация данных есть, место займут только те табличные пространства, которые нужны для работы базы(относительно твоего объема - мизер).
Не та скорость, конечно, но твоим требованиям отвечает.

Как вообще такой монстр у тебя получился?
Аноним 25/01/20 Суб 17:11:32 1582864270
>>1582741
>незя, нужен поиск (читай начальный вопрос)
полуркай технологии яндекса типа clickhouse, возможно решает эту задачу. алсо, в /s спрашивал?
Аноним 26/01/20 Вск 19:17:09 1583475271
8.5mb.png (79Кб, 1116x322)
1116x322
215mb.png (79Кб, 1116x292)
1116x292
У меня есть питоновский скрипт. Он циклом обрабатывает куски данных и базы данных монгодб. Скрипт делает одно и тоже. Разница лишь в том что в тестовой бд 8 дней данных а в полной бд полтора года. Но суть сортировки одинаковая.

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

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


Я ньюфаг, просьба не ругайте.
Аноним 26/01/20 Вск 20:39:08 1583528272
>>1583475
>на тесте мало строк
>на проде много
>что не так?

Всё так, хотя, ты скриптом обсчитываешь порции данных, а не весь набор разом, и у тебя хорошие диски и много оперативы, можешь в несколько потоков одновременно запускать свой скрипт на разные порции.
Аноним 27/01/20 Пнд 04:49:06 1583805273
>>1583528
Вот только я не пойму.
Он берет одинаковый кусок в обоих случаях. И в обоих случаях этот кусок находится в самом начале бд. А разница получается от 0.4 сек до 4.5сек. Хотя всё идентично. Я бы еде понял, если бы скорость выполнения возрастала к моменту продвижения от начала базы, дак нет, она с самого начала низкая становится.
Аноним 27/01/20 Пнд 08:17:12 1583824274
>>1583805
А, у тебя на одной порции данных скорость разная. Ты об этом не говорил.

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

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

Мб вообще запрос работает одинакого, а питонский скрипт по обработе - по разному. Посмотри, сколько выбор именно занимает.
Аноним 27/01/20 Пнд 16:18:22 1584042275
>>1583824
Эх, я же ньюфаня и ни одного твоего слова не понял.
Но я посидел и подумал.
Я делаю выборку по времени. И даю команду выбирать. И он выбирает, но пробегает по всей БД, проверяет все строки на соответствие моему запросу.
И если это так, то в чем преимущество баз данных? У меня получается как бы, какой-то построчный парсинг текстового файла.
И я думал что бд как раз существуют чтобы этого избегать.
Аноним 27/01/20 Пнд 16:25:10 1584046276
Аноним 27/01/20 Пнд 18:08:06 1584133277
>>1584042
У тебя БД - объектная - MongoDB, Она предназначена для того, чтобы доаставать данные по ключу. У тебя ключ - это день?
Ебаный рот, вообще, покажи код, которым ты из монги достаешь инфу, а то пока что все выглядит так, что ты ждешь какой-то магии, а ее не случается.

>Построчный парсинг текстового файла
Пока так и выглядит.
Help Аноним 27/01/20 Пнд 19:32:06 1584200278
Написать SQL запрос, который считает кол-во дублирующихся строк в любой таблице (строки считаются дублирующимися если для каждой колонки их значения равны, кол-во колонок мы не знаем, но скрипт должен отрабатывать на любой таблице). Запрос можно писать для любой СУБД на ваш выбор.
-------------------------------------------------------
Пацаны,спасайте,как так сделать?
Аноним 27/01/20 Пнд 19:42:34 1584210279
>>1584200
Переведи задание на английский и загугли. По первой ссылке будет ответ.
Аноним 27/01/20 Пнд 20:23:02 1584246280
>>1584210
Вижу там только поиск дубликатов по полям конкретной таблицы, это я и сам могу сделать. Но задача в том,чтобы это работало для любой таблицы. Или я в глаза ебусь и не вижу решения,ткни носом,пожалуйста
Аноним 27/01/20 Пнд 20:34:03 1584266281
>>1584200
Тебе надо оптимальный вариант или хоть какой-то?
select count(★) -
(select count (★) from
(select distinct ★ from table))
from table
Такое ебаклакство с подзапросом из-за того, что count(distinct ★), вроде, не работает. А если работает - так ещё проще: count(★) - count(distinct ★).
Аноним 27/01/20 Пнд 20:35:41 1584267282
>>1584266
> ★
Оригинально, возьму на заметку.
Аноним 27/01/20 Пнд 20:43:17 1584273283
>>1584266
спасибо за небезразличие , но ведь distinct * тоже не работает
Аноним 27/01/20 Пнд 22:26:49 1584397284
1580153208993.jpg (26Кб, 648x150)
648x150
>>1584273
Значит, это фича оракла такая.
Аноним 28/01/20 Втр 00:22:18 1584444285
>>1584200
Вот ответ для MS SQL сервер на основе метаданных и динамического sql. Нужно тока любую табличку записать в переменную

DECLARE @tbl_name sysname = 't_govno'
DECLARE @column_name NVARCHAR(MAX) = '';
SELECT
@column_name = @column_name + IIF(c.column_id = 1, '', ',') + c.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);
Аноним 28/01/20 Втр 00:40:38 1584450286
>>1584200

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)
Аноним 28/01/20 Втр 10:00:59 1584543287
Суп sql'ач. Подскажи, существует ли в базах данных такая оптимизированная штука как "калькулируемое поле"?
Допустим, у меня есть объект "касса" в БД. У кассы должен быть баланс, но я не хочу его записывать как поле, т.к. его придётся поддерживать консистентным.

Баланс у кассы изменяется посредством "финансовых операций" у которых есть "сумма". Собственно, баланс кассы это общая сумма всех операций (например операция зачисления положительная, операция списания отрицательная). Вот и хочу узнать, может есть в БД (postgres) такая функция как какое-нибудь кэшируемое поле, или оптимизированное, автоматически рассчитываемое, т.к. каждый раз пробегаться и суммировать все операции чтобы узнать баланс мне кажется это плохой идеей. Вдруг операций будет сотни и тысячи
Аноним 28/01/20 Втр 10:30:17 1584554288
>>1584543
Вьюху создавай для такого

Или функцию пиши, которая будет это вычислять
Аноним 28/01/20 Втр 10:31:19 1584555289
>>1584543
Можно написать триггер, который видит, что обновляется колонка, и обновляет сумму. В постгресе трингеры есть. Даже в sqlite есть.
Аноним 28/01/20 Втр 11:02:32 1584575290
>>1584554
> Вьюху
Пока не знаю, что это. Буду гуглить.
> Или функцию пиши, которая будет это вычислять
А это не будет эквивалентно обычной аннотации?
>>1584555
А триггер это good practice?
Аноним 28/01/20 Втр 11:30:10 1584589291
>>1584575
Вьюха - это по сути алиас для select-запроса, но некоторые вьюхи можно и апдейтить. Не знаю, как она поможет в твоём случае, всё равно её столбцы вычисляются в каждом запросе.

Триггеры/процедуры/функции - спорная практика, на самом деле, хоть так делают. В БД должны быть данные, а не логика. Но ради перформанса и консистентности приходится идти на некоторые жертвы.
Аноним 28/01/20 Втр 11:35:04 1584593292
>>1584575
Нет, триггер - это не гуд прэктис.

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

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

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

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

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

Учитесь правильно задавать вопрос, господа, чтобы было коротко но ёмко.
Аноним 28/01/20 Втр 11:39:45 1584595293
>>1584593
Бля, чел, если бы тот анон знал столько же, сколько и ты, он бы не задавал таких вопросов.
Аноним 28/01/20 Втр 11:39:45 1584596294
>>1584593
Еще добавлю, почему тригер - не гуд практис, потому что он будет давать базе неявную нагрузку, и однажды ты увидишь у себя блокировки и не сможешь ни хуя заинсертить, пока тригер не отработает.

Еще один варик - это просто иметь расчитанное значение баланса в кажой строчке проводки, например
1. 2020-01-01 Вася пупки новый сумма = 0, баланс = 0
2. 2020-01-02 Вася пупки пополнение счета сумма = 200, баланс = 0 + 200 = 200 (просто прибавляем к текущему начению баланса эти 200)
3. 2020-01-03 Вася пупки снятие со счета сумма = -100, баланс = 200 - 100 = 100
И т.п.
Аноним 28/01/20 Втр 11:52:31 1584606295
>>1584543

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

Обычно в таких случаях UPDATE в принципе запрещен, а все изменения делаются с INSERT babos, reckord_id, familya_nakosyachvshego_pidorasa_slash_pyzdi.
Аноним 28/01/20 Втр 12:00:34 1584612296
>>1584606
Прям представляю: дали студенту в шараге лабу по базам данных, а он на следующей паре приносит супер-энтерпрайз-хайлоад-систему на полляма строк, учитывающую вообще всё, включая кассовые символа.
Аноним 28/01/20 Втр 12:18:09 1584618297
>>1584589
> Вьюха - это по сути алиас для select-запроса, но некоторые вьюхи можно и апдейтить. Не знаю, как она поможет в твоём случае, всё равно её столбцы вычисляются в каждом запросе.
В общем это сильно похоже на аннотацию, только удобнее работать как с реальной колонкой в БД.

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

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

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

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

>>1584595
Двачую

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

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

Аноним 28/01/20 Втр 12:29:08 1584624298
>>1584618

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

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

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

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

Аноним 28/01/20 Втр 13:34:28 1584691299
>>1584624
>Баланс это всегда select sum(babos) group by account_id

Чем это отличается от того, что я сказал про расчет баланса при инсерте каждой новой строчки с операцией?
Аноним 28/01/20 Втр 14:09:01 1584720300
>>1584624
Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует.
Аноним 28/01/20 Втр 14:16:34 1584733301
>>1584720

>>1584596

Я вот тут предложил тебе решение считать баланс на лету на основе последней операции, просто забирая его последнее значение с предыдущей строки этого аккаунта.
Аноним 28/01/20 Втр 14:18:25 1584734302
>>1584720
>Ты прав во всем. Собственно, допустим этих записей babos тысячи и сотни тысяч. Это не плохо, если каждый раз для получения состояния "кассы" буду проходиться по всем этим тысячам записей? Этот вопрос больше всего интересует.

Если поля, по которым ты группируешь индексированы , то нет.
Аноним 28/01/20 Втр 14:25:59 1584741303
>>1584733
Спасибо, анончик, я видел. Просто наличие дополнительных полей обуславливает необходимость поддержания консистентности. А в случае если надо будет изменить одну операцию в прошлом (исправление ошибок, опечаток, что угодно) то в этом случае нужно будет пересчитывать все последующие записи. Я рассматривал такой подход, но только если колонка "баланс" была бы в самой таблице "касса". Тогда бы при создании новой "операции" нужно было бы только прибавить или отнять от текущего баланса. Вот я бы хотел этого избежать. Вообще я бы хотел избежать добавление доп. полей чтобы избежать добавления триггеров и обработку кейсов в коде.

>>1584734
Ну что же, это я и хотел услышать. Можно даже view не создавать а обойтись аннотацией
Аноним 28/01/20 Втр 16:11:26 1584842304
Какую книгу по бд для собеса на бек посоветуете почитать? Learning SQL из закрепа?
Аноним 28/01/20 Втр 16:34:19 1584865305
Есть нормальные книги/видео/статьи по проектированию БД? Планирую пилить биллинговую систему, в которой будет очень много данных, но знания пока на уровне запросов в БД. А вот как сделоть нормальную релятивную базу, я пока не понимаю.
Аноним 28/01/20 Втр 17:14:05 1584913306
Сап БДач, у меня знакомый просит в отчёт по практике запилить БД:
5-8 несложных таблиц, заполнение, ключи/ограничения, по паре хранимых процедур/функций и триггеров, минорная работа с доступом пользователей и резервными копиями. Программа максимум: набросать простенькую форму для работы БД
Суть в том что:
1. Это не мой профиль, но в теории умею
2. Сделано должно быть через 17 часов.
3. Я не сильно горю желанием.
Сколько денег запросить?
Аноним 28/01/20 Втр 17:30:52 1584925307
>>1584913
5 тыщ проси, если только структуру
А простенькую форму для работы с бд - это где, в аксесе, что ли? В пизду его шли с этим. Если не в аксесе, а в вебе - то это долго делать. В общем, не делай форму.
Аноним 28/01/20 Втр 19:43:51 1585038308
Screenshot 2020[...].png (483Кб, 1534x1638)
1534x1638
>>1584133
Вот кусок. Там дальше всякие махинации с этими данными. И рисование графиков по ним.
Аноним 28/01/20 Втр 20:24:22 1585067309
>>1584624
Вы забываете про двойную проводку еще
Аноним 28/01/20 Втр 21:12:50 1585086310
Screenshot1.png (58Кб, 652x739)
652x739
Аноны, расскажите почему моё решение неправильное. БД - SQL Server.
Аноним 28/01/20 Втр 22:38:34 1585128311
Анон, посоветуй.
Сейчас прохожу курс для начинающих по sql, там пока все просто селекты и прочее, запилился на курс ради строчки в резюме для аналитика но вроде мне это понравилось. Как дальше развиваться? Что с этим sql делать можно? Базы данных проектировать или просто запросы писать? Этот момент я упустил
Аноним 28/01/20 Втр 22:51:43 1585137312
>>1585128
Если ты по базам данных угорать хочешь то это DBA - database administrator. Достаточно востребованная профессия. Правда у нас наверное не очень - их на галеры (наверное) мало набирают, если вообще набирают. А местных продуктовых контор не так много, ну и платят они (наверное) не очень, так с галерами конкуренции нет.
Аноним 29/01/20 Срд 05:01:43 1585296313
>>1585128
Можно базы, можно запросы, можно админить(но это дно). Гугли sql аналитик.
Аноним 29/01/20 Срд 06:17:36 1585301314
Аноним 29/01/20 Срд 07:17:24 1585310315
>>1585296
>>1585137
Спасибо, аноны
скорее да, sql аналитик что-то такое
Аноним 29/01/20 Срд 08:34:26 1585320316
>>1585086
1. Вангую, что процесс 2 будет ждать коммита, и только потом сможет прочитать, вообще это значение.
Задачка с подвохом типа, думаю что на собеседовании в условиях стресса решил бы, как ты
2 ты сам можешь провенрить это в скл сервере на примере
Аноним 29/01/20 Срд 08:55:32 1585324317
>>1585320
да, сейчас сижу ковыряю сервер.
оказалось, что рид коммитед подвисает до момента коммита транзакции и в итоге и там, и там будет 1.
Аноним 29/01/20 Срд 09:13:15 1585330318
>>1585324
вернее, в момент Т3 там будет неопределенное состояние, так как транзакция не выдаст результат, но в некий Т5 в процессе 2 появится единица.
Аноним 29/01/20 Срд 09:42:16 1585339319
>>1585324
Чаво
Серьезно?
Это же полный пиздец, ждать завершения транзакции для чтения, что этот sql server себе позволяет?
Аноним 29/01/20 Срд 10:23:09 1585350320
>>1585330
Ага, так правильно.

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

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

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

Вообще, думаю, что устроится на рараба/аналитика баз данных проще, чем сдать егэ по любому предмету.
Куда развиваться Oracle разработчику? Аноним 29/01/20 Срд 23:24:34 1585865321
147750723814292[...].jpg (36Кб, 374x600)
374x600
Третий год я разработчик БД. Начинал с разраба-аналитика отчётов в MS-SQL, далее прыгнул в мелкобанк. Работал в DWH Oracle, сейчас работаю в околопроцессинге, сопровождаю/разрабатываю функционал АБС. Работаю число с ораклом 11, 12, 18, 19 версий очень много разных баз. Пишу пакеты всякие, функции, колупаю индексы, партицирую таблы, делаю api для ява-разрабов и всякое такое. Стандартные задачи DBD в банке.

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

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

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

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

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

Что посоветуете? Есть 4 стула.
Аноним 30/01/20 Чтв 02:06:09 1585932322
Аноним 30/01/20 Чтв 02:30:09 1585936323
>>1585865
Дам банальный, но единственно верный, как мне кажется, совет - идти за мечтой.
Советую только сразу отбросить мысли о большой зп. В дата сайнсе даже после топового образования в шаде многие идут за 60к стажироваться в яндекс. Много получают звезды, стать которой можешь и ты вполне, если правда этим горишь, а не потому что навыдумывал себе хорошую зп.
Аноним 30/01/20 Чтв 03:58:01 1585944324
>>1585865
Знаешь ли ты математики, нужные для дс? Они вообще конечно не очень сложные, но поднимать с нуля тервер, матан, статистику и методы оптимизации может быть не так просто. Без них можно быть успешным конечно, но это не сильно отличается от проги обычной, даже в худшую сторону на мой взгляд. По перезапускаешь модельки с разными коэффициентами в поисках оптимальных. Нейронки чуть сложнее, но тоже не сильно отличаются по-моему. Ну и результаты твоей работы не видны сразу и оценить их непросто.
В любом случае, если текущая работа совсем не в каеф, меняй конечно. Дба точно минус, уныло же. Дальше в оркл кажется аналогично. Бекенд в принципе норм. Ещё можешь посмотреть в сторону дата инженера (по сути собираешь пайплайны для тех же мл-ей, не сильно отличается от работы с базами, но чуть веселее) или аналитиков, которые рисуют картинки в табло или чем-то аналогичном (опять же опыт работы с бд почти релевантный, + не надо учиться кодить)
Аноним 30/01/20 Чтв 08:57:58 1585981325
изображение.png (209Кб, 803x374)
803x374
Суть в чем, есть устройства, в поле записываются их номера
есть поломки на этих устройствах, в поле записываются их причины
нужно найти повторяющиеся причины поломки на устройстве
каким образом можно это найти, может есть какие то функции которые помогут сосчитать? я уже не знаю куда копать(
так же реквестирую годную литературу что можно почитать по 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
Аноним 30/01/20 Чтв 08:59:56 1585982326
>>1585981
start_time - начало аварии
net_address - устройство
inc_reason - причина аварий
Аноним 30/01/20 Чтв 09:16:40 1585986327
>>1585932
Обоснуй

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

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

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

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

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


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

Вот это гляну. Оттуда легче перекатится в DS.
Аноним 30/01/20 Чтв 11:51:03 1586042328
Приветик всем в этом чатике.
Я совсем зеленый, но интересно стало.

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

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

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

Будет ли это работать и работать корректно? Выведутся ли мне результаты из таблицы с id от 2 и выше?
Аноним 30/01/20 Чтв 11:52:16 1586044329
>>1586042
Обосрался слегка.
Не SELECT, а SHOW.
Аноним 30/01/20 Чтв 13:56:56 1586108330
>>1585986
>Яндекс - клоака зловонная. ЗП там деймеингуют очереди из вайтишников. Плюс ебучая академия Яндекса которая набирает себе мясцо по ценам 2014 года. Джуны/мидлы получают там хуйню, особенно первые. Посоны ДС даже в нашем мелкобанке получали 100 как джуны, от 160 как мидлы.
Типично для славянских хуесосов, которые конкурируют исключительно демпингом.
Аноним 30/01/20 Чтв 17:11:43 1586266331
Сап, ананасы. Хочу вкатится в базы данных, не посоветуете годный учебник по sql с практикумом? И если можно то и на Android, дабы обучаться на рабочем месте без особого палева
Аноним 30/01/20 Чтв 18:22:01 1586360332
>>1586266
На началах (если время позволяет) можешь в SoloLearn начать. Получишь немного теории, познакомишься с синтаксисом.

Знатоком и экспертом после курса в сололирн ты не станешь, это лишь самое начало.
Аноним 30/01/20 Чтв 18:40:27 1586391333
>>1586360
Уже в процессе. Но что дальше ботать? Плюс опять же нужна практика, пусть хоть и из примитивный заданий.
Аноним 30/01/20 Чтв 22:29:03 1586602334
>>1586391
братик, сейм щит, задрачиваю сейчас один курс, думаю дальше попробовать в развертывание/DBD но хз где материал брать
Аноним 01/02/20 Суб 08:09:55 1587778335
Аноним 01/02/20 Суб 11:26:21 1587817336
>>1587778
Шоу бизнес.

Команда, чтоб показать таблицу, столбец, строку и тд.
Аноним 02/02/20 Вск 02:35:11 1588981337
SAP HANA жива еще?
Аноним 04/02/20 Втр 11:00:14 1591292338
>>1588981
У нас тут тхреад умер, не то что твой сап.
Аноним 04/02/20 Втр 11:11:36 1591294339
>>1591292
Ну так обсуждать СУБД - это не принт в цикле на питоне сделать.
Аноним 04/02/20 Втр 23:08:26 1591943340
Не подскажете, как можно пройтись по селекту вперед и назад?
Как в программировании: двигаться с концов массива в его центр
Решаю задачку с скл-ех 125, чет ваще никак
Аноним 04/02/20 Втр 23:18:30 1591947341
>>1591943
> Как в программировании
Ну так буквально написать процедуру с циклом.
Аноним 05/02/20 Срд 00:12:13 1591967342
Аноним 06/02/20 Чтв 11:35:21 1593002343
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
Аноним 06/02/20 Чтв 23:29:39 1593871344
15122909811850.jpg (801Кб, 1171x1495)
1171x1495
помоги пожалуйста, анончик
Есть таблица table1(id, name)
где id является ключом. Поле name может повторяться.
Задача: написать один запрос, который удалит все дубликаты. Т.е. значения в колонке name станут уникальными, но множество, составленное из значений колонки name не должно изменится.
Если есть два кортежа (1, 'abc') и (77, 'abc') остаться может любой из них.
Аноним 07/02/20 Птн 07:33:22 1593993345
1579554418-3088[...].jpeg (73Кб, 700x769)
700x769
Великомудрые повелители БД, решил угореть по хардкору и написать складскую БД на Access_und_VBA, для учета стройматериалов на участке. Никак не вдуплю в алгоритм. Планирую мутить БД "Справочники" с таблицами по типам материалов и при поступлении на склад вносить в таблицу "Приход" с такими полями: id_материала (=id_материала_в_справочнике), дата поступления, кол-во, контрагент, номер накладной. И также заносить этот приход в таблицу "Склад", предварительно отыскав материал с подобным id и добавляя только количество. При выводе со склада ебашить в таблицу "Проеб" с датой, id, кол-вом, контрагентом и т.д. Я правильно мыслю или можно подобное замутить в одной таблице и я множу сущности?
Аноним 07/02/20 Птн 11:17:13 1594087346
>>1593871
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
Аноним 07/02/20 Птн 16:22:03 1594288347
>>1593993
>складскую БД на Access_und_VBA
Нафига, если рано или поздно придётся интегрироваться с какой-нибудь 1С-парашей. Бери сразу Odin-Ass.
Аноним 07/02/20 Птн 16:30:15 1594293348
>>1594288
>интегрироваться с какой-нибудь 1С-парашей
Никто нам в прорабку, в чисто поле, не поставит 1С. Буквально пару прорабов и кладовщик будет кнопки жмакать. ну может еще сводные отчеты будет в ворд генерить и по почте отсылать.
Аноним 07/02/20 Птн 16:35:28 1594298349
SELCET ALL FROM HUI WHERE PIZDFAS A LASDKLGNFDLSK GHLDFGSKH MFGD,MGDFHH BJ;LDFSMGKL;DFG,H;LGFJHGL;SDF,GHGDСУККАААА ЗАЕБАЛО ЗАЕБАЛААА ЗЩАЕБАЛАААА
Аноним 07/02/20 Птн 16:39:19 1594304350
Аноним 07/02/20 Птн 17:56:09 1594390351
>>1594304
Двачую. Вот многие ругают сикуль, а мне нравится прям.
Аноним 07/02/20 Птн 19:05:39 1594484352
Дайте адекватный туториал по JOIN'ам
Cпасибо.
Аноним 08/02/20 Суб 02:07:14 1594952353
>>1594390
И я двачую.
Мне он видится таким логичным, в отличии от хаотичного css - жабаскрипта.

Удивляюсь, как многие фронтовики смогли выдрочить все эти ангуляры с реактами, на которых голову сломать можно, а простой понятный скл асилить не могут.
Аноним 08/02/20 Суб 15:37:08 1595438354
Суп БДач. Подскажи плез.

Использую postgres.

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

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

Собственно вопрос:
Можно ли как-то связать таблицу и её отображение хотя бы какой-нибудь связью? Чтобы поле суммы было как можно ближе к записи "Чек"?
Аноним 08/02/20 Суб 15:37:30 1595439355
Screenshot20200[...].png (62Кб, 1477x608)
1477x608
>>1595438
Картинка отклеилась
Аноним 09/02/20 Вск 10:37:46 1596095356
>>1595438
И зачем именно вьюху?
Аноним 09/02/20 Вск 19:22:24 1596512357
>>1596095
А какие предложения лучше?
Я в принципе сделал, что хотел, и скажу что моя ошибка это размышление о БД терминами ORM. В итоге сам загнал себя в угол и искал несуществующие вещи.

Но если есть какое-нибудь решение лучше, буду рад выслушать.
Аноним 09/02/20 Вск 19:46:03 1596535358
Классический вопрос про букинг

Имеется аналог 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мс
Аноним 10/02/20 Пнд 09:59:08 1597040359
>>1596535
Как минимум можно один раз join делать с homes. Потом в инете есть норм решения по "result of range difference would not be contiguous".
Аноним 10/02/20 Пнд 20:58:58 1597525360
>>1596535
Бред какой-то. Хранить нужно даты, и не exposed, а все вместе. У даты должен быть статус и опциональная связь с арендатором. Тогда можно для хозяина сразу рисовать календарь с именами в занятых клетках.
Аноним 11/02/20 Втр 00:11:02 1597675361
>>1597525
Типа сделать связующую таблицу date_id host_id, где date_id ссылается на конкретную дату?
Аноним 11/02/20 Втр 14:59:27 1598131362
MySql боги помогите решить задачу.
- определить количество уникальных наименований .
- определить кол-во артикулов входящее в каждое из уникальных наименований.
- разделить прайс на группы с 01 по 99 по номеру артикула, где номер группы это 5 и 6й символы.
- определить кол-во артикулов в каждой из групп.
- определить кол-во уникальных наименований в каждой из групп.
- последние 2 пункта вывести в виде отчета: Группа, Кол-во артикулов, Кол-во уникальных наименований.

таблица вида:
Номер | Имя | Время |
z56 |Item1 | 11-12 |
x
33 | item2| 12-20 |
z26 |item1 | 01-25 |
h
33 |item2 |21-30 |
Аноним 11/02/20 Втр 15:01:47 1598132363
Безымянный.png (5Кб, 484x149)
484x149
НУ ЧТО ЗА ПРЕКОЛ
Аноним 11/02/20 Втр 15:18:30 1598150364
>>1598131
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 плохо формализована задача или я туп ХЫ
Аноним 11/02/20 Втр 16:02:21 1598208365
>>1598150
>
>>1598131
таблица уехала. должно быть так:
__Номер __|______ Имя __| Время |
z1234561234 |Item1 | 11-12 |
x1234331234 | item2| 12-20 |
z12342612 |item1 | 01-25 |
h123433123 |item2 |21-30 |
Аноним 11/02/20 Втр 18:13:32 1598363366
>>1550921 (OP)
Сап господа

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

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

2.
Используется ORM, так что запросы в итоге делаются через sp_executesql
Что выливается в parameter sniffing и в просадки по производительности:
Почистили кэш, сделали запрос для мелкой компании, план запроса попал в кэш, делаем запрос для крупной компании - ловим timeout из-за того что используется неоптимальный план.
Какие выходы из этой ситуации?
На данный момент на каждый запрос в подобных местах стоит option recompile, но это определенно не выход.
Аноним 11/02/20 Втр 23:07:59 1598773367
>>1598363
> Что обычно в таких случаях делают?
Используют teradata например вместо обычных субд?
Аноним 12/02/20 Срд 11:53:09 1599084368
Попросили перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бд. Решил собрать инфу по комплектующим компьютеров и застрял на структуре бд: я втупую могу каждой комплектующей выделить свою таблицу с ценой, названием и характеристиками, но тогда в ней не будет никаких связей а от меня ждут явно реляционную бд и это, как мне кажется, не самая лучшая практика.
Аноним 12/02/20 Срд 13:48:03 1599135369
>>1551177
>>1550940
Если это оракл, то тебе надо делать 2 типа данных уровня схемы. Один просто is object, а другой is table of. Процедуры не умеют возвращать значения в привычном виде, но могут через out параметр.

Параметры in - даты, группы товаров. На out - коллекция через bulk collect. Как правило так не делается, тем более это можно сделать через функцию. А если нельзя прокинуть предикат то юзается pipeline-функция.
Аноним 12/02/20 Срд 15:48:45 1599235370
>>1597525
Если я правильно понял, то ты поддерживаешь реализацию, где хранятся отдельные дни.

Выставил с 10 по 20 - создается 10 записей с датами. Так?
Аноним 12/02/20 Срд 16:05:57 1599250371
>>1599084
>перед собесом сделать скрипт, парсящий любой каталог и собирающую инфу в бд

ты им хочешь таск закрыть?
Аноним 12/02/20 Срд 16:08:48 1599253372
>>1550940
>Что от меня хотели

Чтобы ты им бесплатно выполнил задачу, долю продаж блять с НДС нахуй
Аноним 13/02/20 Чтв 00:14:42 1599815373
Можно ли в postgres сделать кастомный тип со встроенной валидацией контрольной цифры, например, для ИНН?
Аноним 13/02/20 Чтв 00:22:33 1599822374
>>1599815
Ваще не вопрос. Гугли "create domain"
Аноним 14/02/20 Птн 17:53:22 1601858375
Сап.
Открыл для себя редгейт, понравилось, появилась зависимость. А потом у него кончилась двухнедельная триалка:(
Реквестирую советы как обойти его защиту, так как тулы топовейшие, а 1500 баксов в год платить не могу
Аноним 15/02/20 Суб 00:25:26 1602222376
>>1601858
Мне тянка на новый год подарила RedGate AutoComplete Для SSMS.

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

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

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

Кстати, раньше в redgate работал еще ключ
i need more time
Который еще на какое-то время давал с ним поработать.

Аноним 15/02/20 Суб 13:30:05 1602605377
>>1602222
Да про ключ знаю, пробовал, уже не работает.
С ресетом триала не получается. Пробовал удалять, чистить руками реестр и все записи о редшейте и это не помогает. Он при установке разварачивает свой сервис на 22223 порту, а тот шлет на их серв полный конфиг системы и получает ответ что триалка на этой машине уже запускалась. В общем, судя по всему, оно сейчас не ломается
Аноним 15/02/20 Суб 19:06:19 1603153378
А если нужна дата на десять дней раньше последней, как писать запрос надо? max(date) - последняя - работает. SELECT DATE_SUB(max(dt),Interval 10 DAY) - уже нет
Аноним 15/02/20 Суб 20:42:43 1603280379
>>1602605
Если он разваорчивает сервис, мб надо сервис стопнуть?
Аноним 16/02/20 Вск 04:54:25 1603517380
Аноним 16/02/20 Вск 16:49:42 1603946381
Ребят, помогите с MySQL (в какую сторону копать). Есть один проект, который работает на этой бд, и у меня некоторые траблы с ней. Сам сайт работает довольно быстро, т.е запросы, где происходит выборка или запись в бд происходит довольно быстро, но иногда эти же самые запросы отрабатывают нереально долго, что приходится перезагружать страницу. И суть в том, что если я перезагружу страницу, и выполню такой же запрос еще раз - он отработает быстро, так, как должно. В чем может быть проблема?
Аноним 16/02/20 Вск 16:53:51 1603951382
Аноним 16/02/20 Вск 17:27:02 1604007383
>>1603951
Начал копать сюда. Но никак не могу понять почему же все-таки он зависает, и почему он делает это не всегда.
Аноним 17/02/20 Пнд 01:12:24 1604731384
>>1603946
Профайлер запускай и выпаливай, что долго работает.
Что тут посоветовать еще.
Мб запрос и быстро отрабатывает, но его тчо-то лочит (незакрытая траза какая-нибудь)
А мб и долго, потому что оптимизатор mysql не может построить план, например.

Да до хуя причин есть, нет смысла их все перечислять без первичной диагностики, выпаливай запрос через профайлер, потом уже смотреть можно будет.
Аноним 17/02/20 Пнд 11:10:48 1604970385
>>1604731
Спасибо. Через processlist нашел блокирующий запрос.
Аноним 17/02/20 Пнд 19:59:31 1605561386
Что следует читать после Learning SQL? Сборник рецептов или же нет? Есть ли общие рекомендации по литературе для вкатывания в sql вообще и в oracle? Какие книги следует прочитать для понимания er-моделей?
Аноним 17/02/20 Пнд 21:20:56 1605714387
Аноним 18/02/20 Втр 17:16:54 1606658388
image.png (19Кб, 419x320)
419x320
Анон, есть основная таблица 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

Оба говна не работают. Халп!
Аноним 18/02/20 Втр 18:27:17 1606766389
>>1606658

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

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

Это вообще и не сработает наверное.
Аноним 18/02/20 Втр 19:11:13 1606806390
Аноним 18/02/20 Втр 19:18:17 1606813391
>>1606806
Первый docid в котором id главного документа.
Там подзапрос возвращает таблицу в которой два столбца docid. Первый из document (Docid_h), второй из linkeddoc (Docid).
Аноним 18/02/20 Втр 19:40:23 1606845392
>>1606766
Анончик, спасибо! Вроде то, что нужно

Как стать таким же клевым?
Аноним 18/02/20 Втр 19:47:57 1606861393
>>1606845
Пока только эту книжку осилил, может поможет. А это задание с собеса или ресурса какого?
На деле мне кажется запрос хуевый
>>1605561
Аноним 18/02/20 Втр 20:02:56 1606877394
>>1606861
Нет, лол, это реальная таска
Аноним 18/02/20 Втр 21:32:11 1606999395
1.png (34Кб, 957x341)
957x341
Подскажите нюфагу. Есть таблица с полями user_id, event_date и event_type. Нужно для каждого месяца вернуть число новых пользователей и число пользователей, вернувшихся в следующий месяц.
По отдельности я два корявых запроса написал, а как объединить их теперь, не знаю.
Аноним 18/02/20 Втр 23:38:25 1607161396
>>1606999
А если делать через 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
Аноним 19/02/20 Срд 00:30:54 1607228397
Анон, а где можно посмотреть кейсы для практики построения ETL, желательно с использованием хадупа? Просто хочу сделать пет-проджект, но не могу придумать себе задачу, поэтому хочу взять уже сформулированную задачу и решить её. Хотелось бы так же что бы для задачи было бы откуда брать данные. Нет ли такого сайта или статьи, откуда я бы мог себе взять подобный кейс?
Аноним 19/02/20 Срд 15:33:55 1607929398
Что значит -1?
В циклах встречал
20/02/20 Чтв 08:58:22 1608773399
>>1607929
это значение
в коде видел
Аноним 20/02/20 Чтв 10:07:32 1608816400
>>1607228
Не знаю про "где посмотреть", но типичный кейс с ETL с использованием хадупа -- это реплицировать редко используемые, не апдейтящиеся данные с какой-нибудь активной дорогой бд на дешевый хадуп.
Но это довольно тяжело представить в виде пет проекта
Аноним 20/02/20 Чтв 10:08:34 1608818401
>>1607161
Чем больше подзапросов тем хуже.
Аноним 21/02/20 Птн 18:55:17 1610508402
image.png (28Кб, 548x325)
548x325
Вы нарушаете философию UNIX!
Аноним 21/02/20 Птн 19:00:29 1610514403
Аноним 21/02/20 Птн 19:19:50 1610534404
>>1610508
>make every programm a filter

чтоб фильтровать прыщеблядей пердолящих сосноль от нормлаьных людей
Аноним 21/02/20 Птн 20:16:34 1610597405
>>1610534
select col1 col2 from data.txt | where col1 -eq 123 | order by col2 asc
Аноним 21/02/20 Птн 20:56:16 1610642406
>>1610597
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'
Аноним 21/02/20 Птн 21:00:37 1610647407
>>1610642
А вот XPath так не умеет.
Аноним 21/02/20 Птн 22:09:48 1610737408
Какие есть современные удобные встраиваемые базы данных
Аноним 21/02/20 Птн 22:13:26 1610742409
>>1610534
>чтоб фильтровать прыщеблядей пердолящих сосноль
Расшифруй, ничего непонятно.
Аноним 21/02/20 Птн 22:46:08 1610794410
>>1610742
Сразу видно нормального человека, не сидящего в /s/.
> чтобы отсеивать линуксоидов, проводящих всё свободное время в эмуляторе терминала
Аноним 21/02/20 Птн 22:50:48 1610798411
Аноним 21/02/20 Птн 22:58:39 1610803412
А есть ли вообще хоть одна причина юзать монгу?
Если постгря идеально умеет в json?
Аноним 21/02/20 Птн 23:38:35 1610864413
>>1610534
*nix фильтрует неосиляторов и прочий желчный сброд вроде тебя.

Аноним 21/02/20 Птн 23:41:41 1610867414
>>1610803
>А есть ли вообще хоть одна причина юзать монгу?
С монгой тебе не нужно искать оправданий тому, что ты не можешь написать оптимизированный запрос на SQL.
Аноним 21/02/20 Птн 23:44:19 1610874415
>>1610864

продолжать использовать нечитаемые высеры пердящих дидов из 70х
Аноним 21/02/20 Птн 23:56:49 1610894416
>>1610874

Айтишнег должен сидеть на Лине, фронтендеры на маках.
Таков закон.
На Винде только тупые.
Аноним 21/02/20 Птн 23:57:25 1610896417
>>1610874
Пердящие деды из 70-х писали настолько эффективный код, что бизнес-задачи целой корпорации требовали меньше железа, чем одна страница с реактом в 20-х.
Аноним 22/02/20 Суб 00:06:19 1610905418
>>1610896
Причем у тут деды? Они бы охренели, от rps и бигдат, которыми мы не напрягаясь рулим.
А реакты хотят пользователи.
Мы бы обошлись command line tools.
Аноним 22/02/20 Суб 00:10:20 1610907419
>>1610905
>Мы бы обошлись command line tools.
Пердящий дид
Аноним 22/02/20 Суб 10:54:25 1611234420
>>1601858
upd. порывшись в самых глубоких клоаках китайских интернетов, нашел рабочие кейгены для большинства продуктов редгейта.
https://drive.google.com/openid=1cdIodi9zIfReP0M3sHl6GxfNeazkwyUH
там кейгены и инструкции к ним. виндовский антивирус ругается, поэтому, если боитесь, запускайте на виртуалке
Аноним 22/02/20 Суб 10:56:22 1611238421
Аноним 22/02/20 Суб 15:44:12 1611471422
>>1601858

юзаю TOAD написанный на божественном Delphi
Аноним 22/02/20 Суб 16:01:52 1611489423
>>1610905
>>А реакты хотят пользователи.
Но я не хочу реакт, мне вообще этот современный дизайн для планшетов на ПК не нравится (огромные буквы и неинформативные картинки с кучей эффектов и тормозов). Мне уровня фейсбука вполне достаточно. Реакт хочет заказчик, а пользователь жрет что дают.
мимо дед-пользователь
Аноним 22/02/20 Суб 16:51:03 1611529424
>>1611489
Но ведь реакт вообще не про дизайн, он только про иерархию компонентов, внешний вид которых может быть любым.
Аноним 22/02/20 Суб 17:56:51 1611599425
>>1611529

Ревкт, как синоним жирных билдов, оптимистичного ux, анимашек и подобного говна.
Аноним 23/02/20 Вск 11:14:29 1612308426
изображение.png (6Кб, 635x317)
635x317
Есть одна таблица(пикрелетед),всё хорошо пока событие, идёт в рамках одной смены, но если ВремяНачала попадет на первую смену, а ВремяКонец на вторую, нужно это событие порезать на два.

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

Временные смены фиксированы( положим с 9 до 9), есть даже вторая таблица, где хранятся все смены(но к ней нет прямой привязки, но можно заджоинится по ДатаВремя).
Аноним 23/02/20 Вск 17:18:12 1612708427
Какая субд?
Как выглядит табличка-справочник со сменами?
Что ты хочеш написать? Select, который будет генерировать новые строки на основе твоего условия, или Insert, который прямо во время события будет укалдывать в твою табличку 1 (или 2) строчки?
Аноним 23/02/20 Вск 17:53:19 1612765428
>>1612708
-Mssql
-КонецСмены,НачалоСмены,ДатаКонца,ДатаНачала,НомерСмены
-Селект

Аноним 23/02/20 Вск 17:53:53 1612766429
>>1612765
Да, номер смены не ИД, а просто 1 или 2.
Аноним 23/02/20 Вск 18:29:13 1612814430
Тут обсуждают монгу? Кто-нибудь знает, почему может выдаваться ошибка
"MongoError: Topology is closed, please connect"?
Аноним 24/02/20 Пнд 14:40:09 1613553431
>>1612765
Чем отличается "КонецСмены" от "ДатаКонца"?
Аноним 24/02/20 Пнд 15:26:36 1613592432
>>1613553
Первое со временем, второе просто дата
Аноним 24/02/20 Пнд 22:55:37 1614072433
>>1550921 (OP)
>Разбираемся, почему PostgreSQL - не Oracle
Почему?
Аноним 24/02/20 Пнд 23:06:59 1614091434
>>1614072
Наивно. Сюда в основном заходят, чтобы спросить, как прямо сейчас решить какую-то конкретную задачу и, получив ответ, уходят. Никаких обсуждений, ничего интересного :(
Аноним 24/02/20 Пнд 23:15:47 1614100435
>>1614091
Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулю
Аноним 25/02/20 Втр 20:07:12 1614910436
Есть кто шарит за serverless db? Мне нужно вкатится, но не хочу тратить время на неправильный курс, может анончик подскажет. FaunaDB вам как?
Аноним 25/02/20 Втр 21:07:50 1614937437
>>1614100
>Я вот почему спросил, нужно выбрать что то на проект с апишкой, тяжеловесный постгре или мускулю
Террадата/hive
Аноним 25/02/20 Втр 21:11:25 1614939438
Такой вопрос.
Есть, например, таблица материалов. Для получения каждой единицы материала надо сколько-то компонентов. Причём основываясь на количестве компонентов, затраты должны считаться автоматически.
Как это лучше организовать с точки зрения БД?
Вынести количество и затраты в отдельную таблицу?
Аноним 26/02/20 Срд 00:20:30 1615124439
>>1613592
Держи.
t_event - табличка с событиями, в ней start_date - датавремя начала, end_date - датавремя окончания
d_work_shift - табличка со сменами, в ней start_date - датавремя начала, end_date - датавремя окончания


Select
e.event_id
,s.work_shift_id
,iif(e.start_date >= s.start_date, e.start_date, s.start_date) as start_date
,iif(e.end_date >= s.end_date, e.end_date, s.end_date) as end_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)
Аноним 26/02/20 Срд 00:24:47 1615129440
>>1614937
Толсто
>>1614100
Какой проект-то? Интернет-магазин?

Я в любом случае за постгрес между ним и майскл, в 1000 раз больше опций. Кажется, mySql по-прежнему не умеет в CTE даже, что уж говорить про оконные функции и прочие ништяки.
Аноним 26/02/20 Срд 03:56:21 1615177441
>>1615124
Я тоже пробовал что-то вроде этого.Конкретно в этом варианте:
1) Не добавляют строку, а просто меняет время начала-конца
2) Вместо того чтобы резать просто подставляет Время смены на которою заходит верхняя граница( При том не высчитаное, а просто начало-конец)

Например:

Мы полагали что смена идёт с 9 до 21, и выходит:
Старая запись
8.15-9.15
Новая Запись(которую вернул запрос)
9,00-21,00


Аноним 26/02/20 Срд 04:01:30 1615178442
>>1615177
Ну с датами в iif наверное что-то нахуеверчено, щас почекаю, а вот что он не режет, это уже проблема.
Аноним 26/02/20 Срд 07:18:11 1615190443
>>1615124
а нет погоди, таки режет, просто iif втором местами поменяны были e.end_date, s.end_date, и я неправильно счтал datediff. Спасибо аноныч.

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


Аноним 26/02/20 Срд 09:18:38 1615206444
>>1614939
Я так понял материал А изготавливается из материала B, который в свою очередь из материалов C и D?

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

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

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

Делаешь рекурсивный запрос, сначала выбираешь "верхние", материалы, у которых нет paent_id, к ним юнионишь те, у которых parent_id - это айди первой итерации, из всего, что получилось делаешь select sum(quantity) ... grop by material where purchase=true
Аноним 26/02/20 Срд 09:30:40 1615209445
tabl.PNG (3Кб, 400x111)
400x111
>>1614939
То есть если хуёвина А изготавливается из шести хуёвин B, а та - из трёх хуёвин С и двух хуёвин D,
Аноним 26/02/20 Срд 10:38:42 1615233446
15772003267793.jpg (174Кб, 1080x1063)
1080x1063
>>1615209>>1615206
Как-то так.
Но всё-таки уточнение:
есть объект А, для его изготовления нужен: объект B в количестве, например, 2 штук, объект C в количестве 3 кг и объект D в количестве 5 литров. Причём стоимость 1 штуки B, 1кг C и 1 л D вынесена в отдельную "справочную" таблицу.
Надо: организовать всё это во взаимосвязанные таблицы и подсчитать затраты на А, причём, желательно, сразу, основываясь на данных "справочной" таблицы.
Т.е. B, C, D - компоненты A, надо ли эти компоненты все в один столбик забивать? Или каждому - отдельный столбец? Их же очень много может быть. А что насчёт количества компонентов? Их вместе с названием писать типа B - 2 шт. или тоже вынести в отдельную таблицу?
Аноним 26/02/20 Срд 14:56:57 1615538447
image.png (37Кб, 1383x626)
1383x626
у меня есть пикрил как мне просуммировать все результаты, то-есть что бы было не рядов а 3
такая

3 testRegistration2 15 766
1 test 1200
6 user 300
Аноним 26/02/20 Срд 16:03:11 1615690448
544596.png (22Кб, 730x355)
730x355
Последние дни вкатываюсь в реляционные базы данных. Пытаюсь спроектировать хранение формул в таблице. Идея примерно такая, что сложные формулы декомпозированы на мелкие формулы, хранящиеся в таблице в виде ид_формулы, операнд1, операнд2, операция. При этом операнд может быть либо внешним ключом на другую формулу в этой таблице, либо внешним ключом на некое поле в другой таблице. Какие подводные камни? На связи в ER сильно не обращайте внимание, я пока не до конца понимаю, что я делаю.
Аноним 26/02/20 Срд 16:58:12 1615789449
>>1594952
Двачую, сикуэль это как на ангельском просто писать в правильном порядке ВЫБРАТЬ хуйню ИЗ таблиц ПРИСОЕДИНЕННЫХ к другим таблицам ГДЕ ... ГРУППИРОВАТЬ ПО. Все максимально логично.
Аноним 26/02/20 Срд 18:17:42 1615900450
Отчет1-1.png (512Кб, 2801x1169)
2801x1169
Помогите заплутавшему студенту, пожалуйста. Делаю АИС, застрял на проектировании сущностей.

Для формирования договоров на платные услуги, доп. соглашений с пациентами, штатного расписания и графика отпусков нужно хранить реквизиты поликлиники (в договоре и соглашениях используются всякие номера и счета, в расписании и графике - наименование организации). Я не понимаю, куда и к чему таблицу с реквизитами присобачить. Накидал по-быстрому схему. Где и какой внешний ключ создавать? К "ДопСоглашению" привязывать? А то, что атрибут "Наименование организации" потом в штатном расписании и графике отпусков используется, ничего?
Аноним 26/02/20 Срд 18:21:02 1615903451
>>1615900
Уже вижу косяк с графиком работы, но не суть.
Аноним 26/02/20 Срд 18:48:50 1615953452
Аноним 26/02/20 Срд 21:36:33 1616205453
А зачем у постгреса помимо баз и таблиц еще какая-то отдельная сущность - схема? В чем смысл?
Аноним 26/02/20 Срд 23:45:00 1616350454