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


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

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
>>1615690
И нахуя здесь бд нужно?
Аноним 27/02/20 Чтв 11:33:59 1616688455
>>1615690
Одно время тоже об этом думал.
В итоге пришел к выводу, что удобнее хранить формулу текстом и парсить уже в приложении ее.
Аноним 27/02/20 Чтв 11:34:59 1616691456
Аноним 27/02/20 Чтв 20:31:03 1617426457
А по эластику и кибане тоже тут вопросы задавать?
Аноним 28/02/20 Птн 14:14:02 1617943458
>>1617426
Ну ты задай на всякий случай, мб и ответят.
В основном, тред конечно, про реляционки.
Аноним 28/02/20 Птн 15:27:53 1618026459
>>1550921 (OP)
>Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
чтобы было, на кого можно подать в суд
Аноним 28/02/20 Птн 19:23:55 1618226460
>>1617943
Да я уже разобрался.
Аноним 29/02/20 Суб 19:58:15 1619195461
5a3769a7-af61-4[...].png (76Кб, 852x588)
852x588
Не совсем пойму, в каких ситуациях можно без страха использовать shared кластер в Mongo Atlas - только для разработки, или если совсем небольшая приложуха, то и в проде нормально? "Low-traffic applications" - это насколько "low" подразумевается? Поначалу база будет совсем маленькая, не ожидаю 500 одновременных соединений и т.д. А то 0.08$ это 4к в месяц, дороговато. А поднимать монгодб вручную на том же digital ocean выглядит слишком сложно.
Аноним 01/03/20 Вск 15:48:09 1619889462
>>1567135
та хуевина похоже на mysql workbench
Аноним 01/03/20 Вск 15:53:36 1619895463
Аноним 02/03/20 Пнд 18:47:05 1621181464
image.png (675Кб, 1041x551)
1041x551
Аноны помогите советом. Реальные данные не могу привести, но попытаюсь объяснить проблему на примере.
Вообщем есть человек и у него может быть множество различных транспортных средств. Например автомобиль, велосипед, танк, самолет и прочее. Для каждого из транспортных средств своя таблица. Таких таблиц может быть в принципе неограниченное количество. У человека каждого трансп средва может и не быть, каких-то может быть овер9000 и тд.
Вопрос. Как правильно организовать получение всех трансп. средств минимальными затратами, дабы каждый раз не делать селекты из каждой таблицы?
БД postgresql. Пробовал вариант с наследованием, но когда делаешь селект из базовой таблицы (например трансп. средство) то он возвращает данные из всех таблиц, но уникальные столбцы каждой таблицы соответственно не выводятся и плюс родительская таблица всегда получается пустой.
Единственный вариант который вижу - добавить таблицу, в который будут храниться типы трансп. средств которые есть у человека и соответственно делать селект из нее, а потом уже программно обходить только нужные таблицы. Но этот вариант очень ущербный в плане проверки целостности при каждом добвлении / удалении новой записи в любую из таблиц.
Аноним 03/03/20 Втр 15:40:40 1621949465
>>1621181
Промежуточная таблица, посмотри на примере адвенчур воркс ордер и ордер детаил.
Аноним 03/03/20 Втр 19:23:54 1622164466
>>1611489
на фейсбуке ux/ui так себе кста, даже блят не читаемо, если сравнивать с вк, 2 млрд пользователей с вытеканием глаз
Аноним 03/03/20 Втр 20:43:53 1622282467
поставил postgres 9.6 voidlinux
слинковал сервис из /etc/sv/postgres/ в /var/service
выполнил sudo -u postgres -i
пердолю initdb --pgdata=/var/lib/pgsql/data
и выдает creating directory /var/lib/pgsql/data ... initdb: could not create directory "/var/lib/pgsql": Permission denied
есть дока не помогает как мне заставить все ето заработать
То есть поставил, врубил сервис, ща создаю кластер баз даных в виде директории где все будет хранится? Но он арет про разрешения
Аноним 03/03/20 Втр 23:04:17 1622403468
>>1622282
> Permission denied
sudo в помощь?
Аноним 03/03/20 Втр 23:17:04 1622436469
Аноним 03/03/20 Втр 23:49:59 1622466470
Cап, эскьюэлач, сейчас будет тупой вопрос!
У меня в бд есть таблица с записями типа:
https://pastebin.com/raw/bYrcijf2
И записей в таблице до пизды более 20тыс.строк, так, вот, как вы можете видеть, в столбце dates хранятся даты в виде json массива, в котором бывает до 30 элементов, и чтобы найти записи с определенной датой, я выполняю запрос с dates like "%DD.MM.YYYY%".
Мне это видится лютым колхозом, и собсна, реквестирую способы перестроить бд чтобы от данного непотребства избавиться.
Единственный вариант, что я вижу, создавать для каждой даты отдельную строку, но мне кажется, что тогда очень сильно возрастет объем, занимаемый бд.
Аноним 04/03/20 Срд 00:29:31 1622508471
image.png (108Кб, 881x907)
881x907
>>1622282
продолжение:
те кто писал sudo (dosu desu) был прав отчасти я пробовал sudo и su, зашел через sudo -u postgres -i

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

Ну так вот вопрос че делать дальше, пробовал через psql и просто localhost писать
Аноним 04/03/20 Срд 00:29:43 1622509472
>>1622466
> Единственный вариант, что я вижу, создавать для каждой даты отдельную строку
Да.
> тогда очень сильно возрастет объем, занимаемый бд
200к строчек это ни о чем, так что поэтому поводу можешь не переживать.
По сути ты тут выбираешь между скоростью запроса и объемом бд. Если первое тебя не беспокоит, то ничего не делай.
Аноним 04/03/20 Срд 00:34:52 1622514473
>>1622508
оооо, через pgadmin3 зашёл, попробую разобраться шо за магия
Аноним 04/03/20 Срд 00:48:22 1622532474
Аноним 04/03/20 Срд 00:52:06 1622536475
>>1622466
А какие у тебя ключевые поля в этой таблице?
Аноним 04/03/20 Срд 00:54:11 1622538476
>>1622466
>создавать для каждой даты отдельную строку
Зато повысится уровень нормализации и ты сможешь делать нормальные фильтры, джойны и так далее.

Второй вариант, хранить и работать с ними не как со строкой, а как с типом jsonb[], для работы с которым есть нормальные функции, а не поиск лайками.
Аноним 04/03/20 Срд 00:58:29 1622545477
>>1622536
Здесь ключей нет, это типа прокси, которая соединяет данные из остальных таблиц.
Это плохо?
Аноним 04/03/20 Срд 01:04:34 1622551478
>>1622538
>jsonb[]
Резонно, но мне показалось, что поиск по одной строке будет быстрее чем по массиву со строками. Проведу пару тестов
Аноним 04/03/20 Срд 01:20:12 1622561479
>>1622551
Вопрос в том, как ты потом собираешься жить, храня данные в таком бесструктурном виде.
Аноним 04/03/20 Срд 07:35:27 1622641480
Что делает -1?

coalesce(govno, -1)
Аноним 04/03/20 Срд 08:28:54 1622653481
>>1622641
Возвращает -1, если govno - null.
04/03/20 Срд 13:09:55 1622819482
>>1622164
>>на фейсбуке ux/ui так себе кста, если сравнивать с вк
Чет я зря про фейсбук написал, последний раз когда на него заходил - он от вк не отличался.
Аноним 05/03/20 Чтв 02:18:35 1623471483
>>1622514
подключился к локальной базе данных в pgadmin4 только через 192.168.0.10, после того как увидел через ss -noa, чому так? Я же настроил в конфиге через локалхости и любой айпи
Аноним 05/03/20 Чтв 09:21:42 1623545484
>>1623471
> любой айпи
Любой айпи = он сам себе выберет какой.
Аноним 05/03/20 Чтв 20:59:52 1624342485
Сап, реляционные. Такой сетап:
Есть база, в базе меня интересуют три таблицы, две идентичные, третья связана с ними, одна запись третей таблицы связана только с одной записью в одной из таблиц. Нужно получить результирующую таблицу со всеми полями из этих таблиц + пару дополнительных полей, заполняемых в зависимости от значений в полях изначальных таблиц.
Поначалу понятно, хуярим два иннер джоина, потом юнион результатов. А вот как добавить поля и заполнить их я хз. Сами методы для дерганья данных я знаю, но как написать код добавляющий и заполняющий эти поля я не очень осознаю. Тупо какими-то циклами или можно к джоинам как-то прикрутить, шоб изящно было?
Мимонубас
Аноним 05/03/20 Чтв 21:07:57 1624369486
>>1624342
Можно прямо в выражении определить "вычисляемую таблицу" и сделать джоин с ней. Это зависит от конкретной СУБД, в оракле будет типа такого:
(select 1 as "a", 2 as "b" from dial union select 3, 4 from dual)
Аноним 06/03/20 Птн 00:14:13 1624693487
>>1624369
Не совсем осознал, можешь привести пример более наглядный, с табличкой мб какой?
Аноним 06/03/20 Птн 00:21:34 1624698488
>>1624693
Например, вот.
-- Создаём и заполняем таблицу:
create table mytable (id integer not null);
insert into mytable (id) values (1);
insert into mytable (id) values (2);

-- в скобках - table expression, джойним его с mytable
with t as (
select 1 as mytable_id, 'foo' as val from dual
union
select 2 as mytable_id, 'bar' as val from dual
)
select * from mytable
inner join t on (mytable.id = t.mytable_id);
Аноним 06/03/20 Птн 00:24:12 1624700489
>>1624693
Или тебе не данные нужны, а прям новую таблицу создать? Тогда да, смотреть в словаре данных, какие в тех таблицах колонки, и вручную через циклы их добавлять в новую таблицу.
Аноним 08/03/20 Вск 00:24:58 1626946490
Хай, аноны, есть следующая задача (всплыла из-за говнокода при решении другой задачи):
Есть результат запроса с полями
id1, id2, id3
Если id1 и id2 в двух строках меняются местами (вроде 1 10 5 и 10 1 5), то это гарантированно дубликаты.
Можно ли как-то их выпилить? Думал васянскую хэш-функцию запилить, но она не гарантирует корректной работы, с груп баем тоже ничего придумать не могу.
Аноним 08/03/20 Вск 00:30:35 1626950491
>>1626946
А все, сам понял, id1 и id 2 же неодинаковые, можно просто id2 > id1 выбрать.
Аноним 08/03/20 Вск 00:30:35 1626951492
>>1626946
select distinct least(id1, id2), greatest(id1, id2) from mytable;
Аноним 08/03/20 Вск 00:31:10 1626952493
Аноним 08/03/20 Вск 13:12:18 1627246494
image.png (137Кб, 1201x736)
1201x736
image.png (42Кб, 1279x626)
1279x626
image.png (31Кб, 1244x167)
1244x167
Добрый день!
Застрял на задании по вложенным запросам --Получить спецификацию монитора, имеющегося в наличии на складе, цена которого минимальна*.

Не могу понять что не так и как вывести нужный результат.
Может кто нибудь подсказать в чем ошибка что не так ?
Аноним 08/03/20 Вск 19:08:24 1627737495
изображение.png (10Кб, 969x522)
969x522
Аноним 08/03/20 Вск 19:15:01 1627741496
изображение.png (11Кб, 827x482)
827x482
Аноним 08/03/20 Вск 19:36:14 1627764497
Помогите нубу
Есть таблица users на 60+ колонок, 50 из которых могут изменяться со временем. Моя задача создать новую запись если старая изменилась в любой колонке НЕ удаляя старую, то есть UPDATE не подойдет.

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

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

Если колонок было до 5 еще ладно, но когда их много это решение совершенно не годится
Аноним 09/03/20 Пнд 16:06:20 1628588498
Аноним 09/03/20 Пнд 21:14:00 1628980499
>>1628588
Спасибо большое, это то что нужно и даже лучше, хоть и с реализацей пока не полностью разобрался в силу малого опыта
Аноним 10/03/20 Втр 03:09:20 1629175500
>>1628980
На этапе сбора данных. Ssis умеет или ручками, через код.
Аноним 10/03/20 Втр 15:07:00 1629431501
image.png (22Кб, 900x570)
900x570
у меня есть колонка под названием "to" и "from"
собственно проблема на пикриле , как фиксить?
изменить название колонки не вариант, база не моя
Аноним 10/03/20 Втр 16:03:57 1629471502
Посоветуйте курс для того, чтобы смочь начать проходить простецкие задания для собеседований (SQL это не главное требование, но всегда присутствующее). Все, что помню из школы/вуза SELECT *

Можно сложный, можно на английском. Часов на 5-20.
Аноним 10/03/20 Втр 16:14:07 1629477503
>>1629431
Меняй через with, в чем проблема?
Аноним 10/03/20 Втр 16:55:13 1629508504
image.png (6Кб, 985x53)
985x53
>>1629477
можно было просто вот так неуч
Аноним 10/03/20 Втр 19:44:28 1629601505
>>1629431
Вот так и пиши “to” и “from”
Аноним 10/03/20 Втр 19:47:52 1629605506
>>1629471
На сколько знаю годноты кроме sqlex нет(sql-tutorial)
Аноним 10/03/20 Втр 23:01:14 1629720507
>>1629431
Возьми в кавычки: `to`
Аноним 10/03/20 Втр 23:04:14 1629721508
>>1629605
спасибо за сайтец

// мимокрокодил
Аноним 11/03/20 Срд 13:55:58 1630108509
Бля я тупой или что. Мне нужна in-memory SQLite DB, а у меня есть файлик dbtest.db и я хочу таблицы оттуда выгрузить, но куда я не смотрю везде говорят ПРОСТО поставь вместо имени вот этого dbtest.db :memory:, но блять я не хочу писать в коде таблицы, но сохранять хочу в памяти. А если я просто сделаю "jdbc:sqlite:personinfodb.db::memory:" То будет синтаксическая ошибка в имени бд, т.е оно считает что
personinfodb.db::memory: и есть имя бд (неважно сколько там : перед memory, в любых вариациях ошибка.)
Аноним 11/03/20 Срд 15:10:39 1630190510
>>1629175
Все здорово, разобрался с типами scd, хэш функциями для колонок, написал свои триггеры, создал служебные таблицы, теперь все клево и быстро
Аноним 11/03/20 Срд 15:42:30 1630220511
Есть профит от datagrip? Своим скудным опытом попытался найти отличия от встроенного БД функционала в других продуктах jetbrains не увидел разницы.
Мне вообще нужна относительно легковесная штука с автокомплитом под postgres на линукс, pgadmin со своим апачем раз в месяц стабильно отваливается, надоело уже.
Аноним 11/03/20 Срд 16:46:17 1630266512
>>1630108
а разве нужно ставить имя для базы в памяти? пробуй просто :memory: и или ты там хочешь несколько баз
Аноним 12/03/20 Чтв 06:28:22 1630720513
>>1630266
Я хочу написать дбшку как файл, после этого когда буду делать коннекшон просто поставить дбшку, а не писать руками опять. Но я вроде бы нашел, что проблема в какой-то мелкой запятой, которую я не могу найти
Аноним 12/03/20 Чтв 13:20:47 1630975514
есть таблица с id,chop,product,sale
Делаю так
Select chop,product,(SUM(sale)/(select sum(sale)from t1))*100
From t1
Order by chop,product
Аноним 12/03/20 Чтв 14:59:59 1631033515
Аноним 12/03/20 Чтв 15:43:10 1631083516
Аноним 12/03/20 Чтв 17:52:38 1631215517
Аноним 13/03/20 Птн 03:58:18 1631830518
Как настроить секционирование на mysql?
Чтоб оно автоматически резало на секции, какой примерный алгоритм?
Аноним 13/03/20 Птн 05:58:41 1631850519
Подкиньте IDE нормальную, чтоб работала с большинством бд.
Аноним 13/03/20 Птн 08:50:02 1631881520
Аноним 15/03/20 Вск 15:07:02 1633787521
image.png (39Кб, 1174x627)
1174x627
>>1627741
Что то нихуя оно не выбирает
Аноним 17/03/20 Втр 16:18:55 1635151522
анон, мне нужно передать параметром таймспан и преобразовать его в дейттаймп в формате гггг-мм-дд как это сделать?
Аноним 17/03/20 Втр 16:43:43 1635177523
или я могу конвертировать ticks в datetime, datetime же в тиках хранится но я почему то не нашел ни одного способа преобразовать лонг в тики и тики в дейттайм
Аноним 17/03/20 Втр 19:14:54 1635300524
Аноним 18/03/20 Срд 07:29:44 1635681525
ваи.png (7Кб, 420x187)
420x187
Как сгруппировать чтобы было как на пике. Вывести например товар яблоки с группами больше одной
Аноним 18/03/20 Срд 08:24:15 1635688526
>>1635681
WITH Govno
AS
SELECT COUNT(Товар)
FROM Фрукты
GROUP BY Группа

SELECT Товар
WHERE Товар in
(
SELECT *
FROM GOVNO
WHERE GOVNO>1
)
Аноним 18/03/20 Срд 08:25:41 1635689527
>>1635688
А бля, Aкелла промахнулся, вот так:
WITH Govno
AS
SELECT COUNT(Товар) AS Duble
FROM Фрукты
GROUP BY Группа

SELECT Товар
WHERE Товар in
(
SELECT Duble
FROM GOVNO
WHERE Duble>1
)
Аноним 18/03/20 Срд 09:48:41 1635721528
изображение.png (334Кб, 700x669)
700x669
>>1635689
ааа бляяять да идите нахуй короче


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

)

Аноним 18/03/20 Срд 12:36:54 1635857529
Аноним 18/03/20 Срд 13:53:39 1635945530
>>1635857
Хз, вроде все верно, покажи что возвращает. Все вместе и отдельно подзапрос.
Аноним 18/03/20 Срд 13:59:13 1635954531
>>1635945
.>>1635857
а вижу в чём дело...ну врот его ебал в уме это всё придумывать, ты уже должен был понять как делать. вот так решается как я написал, сядь поправь, принцип тот же, сравниваем через ин с групировкой которую сделали в подзапросе
Аноним 19/03/20 Чтв 00:11:00 1636645532
image.png (145Кб, 1192x737)
1192x737
>>1550921 (OP)
Здарова, аноны.
У меня есть БД "студенты сдают проект".
Основные сущности на пикрилейтед. Только вопрос вот в чём. У меня по ТЗ препод (teacher) может быть и руководителем (curator) проекта, и проверяющим (comission_member). Как рациональнее всего сделать разделение учителей на кураторов и участников комиссии? Обяз ли для этого создавать подсущности, которые будут хранить только айди? Хелп
Аноним 19/03/20 Чтв 00:23:33 1636672533
>>1636645
Таблицу кураторы и мембер обьедени в одну, они у тебя делают тоже самое.
Аноним 19/03/20 Чтв 00:26:59 1636681534
>>1636672
Кураторы хранятся в Project, а комиссия выставляет оценки через project mark. У них разные обязанности
Аноним 19/03/20 Чтв 00:28:39 1636683535
>>1636681
На каждый проект по 3-5 челов из комиссии ставят оценку проекту, которая хранится в project mark
Аноним 19/03/20 Чтв 02:59:22 1636739536
>>1636681
Тебе нужно две таблицы:
-ФИО прподователя - ИД
-Роль(куратор\мембер\оба) - ИД

И из них уже собирай по ключам.
Аноним 19/03/20 Чтв 16:54:11 1637184537
Ребят, помогите с запросом. Я пиздец тупой.
Есть 3 таблицы:
Customer: id, name, lastname;
Product: id, label, price;
Customer_Product: customer_id, product_id, date;

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

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

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

Во что вставить вместо двойки, не пойму... Или вообще запрос не так делаю?
Аноним 19/03/20 Чтв 16:54:57 1637186538
у меня postgresql, забыл добавить
Аноним 19/03/20 Чтв 17:17:38 1637212539
vdvsv.png (5Кб, 249x195)
249x195
>>1635945
>>1635954
Все заработало, спасибо =)
declare @t table ( id int, tovar varchar(250), grup varchar(250) )
insert into @t
values (1, 'яблоки', 'Фрукты'), (2, 'яблоки', 'Овощи'), (3, 'яблоки', 'Автозапчасти'),
(4, 'яблоки', 'Шлакоблоки'), (5, 'Говно', 'Говнище'), (6, 'Груши', 'Фрукты')
, (7, 'Груши', 'Овощи'), (8, 'Груши', 'Автозапчасти'), (9, 'Груши', 'Шлакоблоки'),
(10, 'яблоки', 'Автозапчасти'),(11, 'яблоки', 'Автозапчасти'),(12, 'яблоки', 'Автозапчасти');



SELECT tovar, grup
FROM @t
WHERE tovar in
(
SELECT tovar
FROM @t
GROUP BY tovar
HAVING COUNT(*)>1
)
group by tovar,grup
Аноним 19/03/20 Чтв 20:02:14 1637341540
Аноним 20/03/20 Птн 00:30:23 1637585541
Аноним 20/03/20 Птн 12:36:18 1637837542
Гайз, такая ситуация -- не могу выбрать литературу для вкатывания в sql(понадобится мне по работе в будущем)
Может кто-нибудь рассказать свою историю успеха и кто как вообще учился этому ремеслу?
(3 курс-кун)
Аноним 20/03/20 Птн 20:59:57 1638472543
Есть ли те, кто учил этот язык в университете и те, у кого его не было, кто изучал самостоятельно довольно поздно в 20, 25,30,35 лет? Сколько понадобилось времени, тяжело ли было? Пригодились ли вузовские знания?
Аноним 20/03/20 Птн 21:07:42 1638493544
>>1550940
Наверное
Селект доля продаж товара с НДС фром таблица
Гроуп бай дисенд

Если каждое дно, магазин, товар в отдельной строчке, если нет, отсортировать по параметру, который выведет отдельно каждый из необходимых и добавить дисенд, дабы это было в убывающем порядке
Аноним 20/03/20 Птн 21:53:49 1638545545
Бамп
Аноним 20/03/20 Птн 21:57:56 1638562546
>>1638545
> 545 сообщений
> Бамп
Аноним 20/03/20 Птн 23:07:23 1638659547
>>1638562
Я тут недавно, потому деталей не знаю. Не работает, потому что много постов?
Аноним 20/03/20 Птн 23:46:43 1638720548
>>1638659
Да, если постов больше определённого числа, называемого бамплимитом (здесь 500), тред перестаёт подниматься и начинает "тонуть".
Аноним 21/03/20 Суб 00:13:22 1638736549
>>1638720
Благодарю за разъяснение
Аноним 21/03/20 Суб 06:29:23 1638879550
Аноним 22/03/20 Вск 15:27:12 1639932551
Перекат пилите
Аноним 22/03/20 Вск 18:31:35 1640087552
Аноним 24/03/20 Втр 16:44:02 1641660553
Аноним 08/04/20 Срд 12:23:53 1653314554
>>1638472
В 20 лет, пару месяцев заняло изучение. Ничего сложного особо нет, вся логика - суть операции над дискретными множествами и их подмножествами. И то не проный набор помоему.
Аноним 09/04/20 Чтв 03:21:17 1653862555
Правильно ли я понимаю, что OUTER JOIN'ы вернут то, что вернул бы INNER JOIN, плюс (возможно) строки с NULL'ами?

То есть что нельзя пропустить нормальную здоровую строчку без NULL'ов, используя INNER JOIN?
Аноним 09/04/20 Чтв 15:00:56 1654084556
dog.jpg (51Кб, 500x667)
500x667
Анончики, подскажите как можно максимально анально огородить бд на MySQL? Нужно сделать так, чтобы пользователь не мог заглянуть в базу (пароля и логина от рута и пользователей привязаных к бд он знать не будет) при том, что сервер MySQL разворачивает локально у него на компе.
Аноним 09/04/20 Чтв 16:47:47 1654169557
Анончики, как в Редисе сделать поиск ключей по значению?
Например, в бд лежат ключи со значениями в виде словарей, и мне надо выбрать все ключи, у которых одно из полей словаря равно нужному мне значению
Аноним 10/04/20 Птн 12:25:27 1654681558
изображение.png (11Кб, 742x380)
742x380
изображение.png (10Кб, 542x272)
542x272
изображение.png (16Кб, 587x223)
587x223
Не знаю туда ли зашел. Но проблемы в майрософт access. Создаю таблицы и пытаюсь их связать в "схеме данных". Связываю пункт с пункт с типом данных "счетчик" (пик1), он одинаков в нескольких таблицах. Когда связываю пик2, то ошибка пик3 происходит. Пункты эти одинаковы во всех таблицах, с одинаковыми параметрами. Пробовал связывать как до заполнения и любого вмешательства, так и после - результат пик3 всегда.
Хотя есть одно но, если я уберу галки "каскадное обновление связанных полей", и "каскадное удаление связанных полей", оставив только "обеспечение целостности данных", то получается создать связь, но мне те галки нужны. Что делать?
Аноним 10/04/20 Птн 20:48:14 1655055559
>>1654681
в таблицах ты должен первичные ключи расставить, хк как ПК на акцесском
Аноним 10/04/20 Птн 20:51:03 1655059560
>>1654084
выдать учкетку ему с ограниченными правами.
Или вариант для супермозга, создать вторую базу и настроить dblink между, а чтоб избавиться от @блабла.бла синонимо нахуярить


А если всерьез то я не понял вопроса
Аноним 10/04/20 Птн 20:53:08 1655060561
>>1653862
outer - full, пустые могут что слева быть что справа
inner - left, right, просто джойн. слова иннер аутер опускаются из-за ненадобности
Аноним 10/04/20 Птн 20:56:08 1655062562
>>1638472
в универе научился писать селект из одной таблицы.

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


3 год работаю ораклистом. полет нормальный
Аноним 10/04/20 Птн 20:56:35 1655063563
Аноним 10/04/20 Птн 21:12:48 1655074564
>>1655055
Есть ключи. Как раз этот РЕГ_НОМ и есть ключ
Аноним 10/04/20 Птн 21:28:35 1655083565
>>1655060
>outer - full, пустые могут что слева быть что справа
>inner - left, right, просто джойн.
Мало того, что ты отвечаешь не на заданный вопрос, так еще и хуйню несешь полнейшую.
Аноним 10/04/20 Птн 22:51:39 1655117566
>>1655083
поясни за хуйню

про вопрос согласен
Аноним 10/04/20 Птн 22:54:57 1655119567
>>1655074
по факту ты хочешь создать внешний ключ на таблицу.
одна из таблиц должна быть справочником иметь уникальный столбец. т.е. первичный ключ.
Вторая же должна на этот столбец ссылаться

т.е. на нем строит параметр уникальности(первичный ключ)
Аноним 11/04/20 Суб 00:02:19 1655179568
>>1655117
INNER JOIN это аналог JOIN

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

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

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


Вопрос был про то, возможно ли теоретически упустить какую-то строчку, пользуясь INNER JOIN (а не OUTER'ами), если строчки с NULL'ами не нужны. Или же все, что добавляет тот или иной OUTER JOIN по сравнению с INNER'ом на тех же данных, обязательно содержит NULL.
Аноним 11/04/20 Суб 03:51:13 1655307569
>>1655179
сори-сори перепутал, оправдываться не буду
Аноним 11/04/20 Суб 11:54:51 1655455570
>>1550921 (OP)
Можно ли ввести разработку базы в контроле версий?
Хранить "CREATE TABLE USERS" в Git-е и накатывать разные версии без потери данных в той самой таблице?
Аноним 11/04/20 Суб 14:08:57 1655653571
>>1655059
У пользователя на компе устанавливается сервер MySQL (который из zip архива, а не инсталлером устанавливается, если эта информация важна, а то я не силен в этих ваших бд), на этом сервере я создаю бд с которой в дальнейшем будет работать некоторая программа. Так вот, задача заключается в том, чтобы не дать пользователю добраться до этой бд. Вот, например, пользователь может запустить сервер с параметром --skip-grant-tables и в дальнейшем сбросить пароль на root'е. Как ему можно ограничить этот функционал?
11/04/20 Суб 16:34:31 1655778572
>>1655653
Никак, если пользователь Админ.
Не надо на компе у пользователя устанавливать СУБД, чтобы он в ней работал, для этого используют сервер.
11/04/20 Суб 16:36:56 1655780573
>>1655455
Можно, напиши скрипт, который будет превращать табличку в Json, например, и скрипт, который будет из Json инсертить данные в таблицу, с учетом identity_insert, конечно.

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

который бы мерджил данные с продашном
Аноним 12/04/20 Вск 00:52:06 1656134574
Аноним 12/04/20 Вск 18:12:48 1656585575
Работаю ETL разрабом, 170 тыщ на руки в ДС. 29 лет
Стек - sql server,teradata
Ну и SSIS,Pentaho и прочая залупа
Игогда переписываю или пишу процедуры и прочую хуету

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

Как выбраться из говна, пойти в HADOOP и начать учить Джаву...
12/04/20 Вск 23:54:23 1656721576
>>1656585
Аналогичная история была.
Уволился с последней такой работы, тока 200к платили.
Заебало говна разгребать.
Решил, что уволюись, выучу всякие там Angular для фуллстака в дополнение к шарпу, потом бигдату.

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

Потом еще заказ подкинули, и еще - все по связям с предыдущих мест. Я открыл ИП и стал работать на себя, получилось еще поднять доход, а, самое главное, теперь я сам себе хозяин, работаю из дома, сам говорю, сколько стою, в общем, куча профитов.
Проблема только в том, что я так ни хуя нового и не выучил почти, но я тут понял одно - либо учишься, либо зарабатываешь нормальные бабки тем, что умеешь. И решил я заработать хотя бы 10 лямов, чтобы их пустить в инвестиции, а потом уже жить в основном с доходов от ценных бумаг, а освободившееся от зказов время (не всех думаю дропнуть, но большинство) пускать уже на всё, что захочу, включая учебу, если смогу себя заставить, конечно.
Аноним 13/04/20 Пнд 09:18:11 1656853577
Антуаны такой вопрос.

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

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


В таблице есть одинаковые строки с разными ИД. Скажем есть ИД 2 и ИД 3, в рамках этих ИД есть одинаковые строки отличающиеся только ИД, так же есть много других строк\ид, которые не повторяются, пересечения только в рамках строк у которых ИД 2 и 3.
Соотвественно мне нужны строки с ИД 2, которых нет в ИД 3. Вроде как просто решается подзапросом, но какой-то топорный метод, нельзя ли что-нибудь поизящней с OUTER JOIN прикрутить?
Аноним 13/04/20 Пнд 14:00:56 1656996578
>>1655119
То есть убрать этот ключ во всех другиз таблицах и оставить в одной?
Аноним 14/04/20 Втр 16:28:57 1657791579
Сап аноны, ньюфаг влетает в тред, может кто нибудь объяснить как создавать темпоральные данные в MySQL а то порывшись в инете я ничего не нашел
Аноним 15/04/20 Срд 12:49:24 1658320580
>>1656853
1)Каждая строка уникальна? Полные дубли есть?
2)ID уникален?
3)Что значит: "нет в Id3" ? Требуются строки с id2 и таким набором полей которого нет ни для одной строки с id3?
4) для других id могут быть аналогичные ситуации? Требуется ли фильтрация для них?
Аноним 16/04/20 Чтв 21:47:20 1659504581
image.png (98Кб, 1359x576)
1359x576
Анончик помоги. Ебусь который час, пытался гуглить, но я даун. С БД ни разу в жизни не контактировалне считая майкрософт аксесс
Нам скинули файл с БД какой-то, сказали открыть через VS, я открыл. По заданию нужно её заполнить чем-нибудь.

Я создал вот такую хуйню пик1.
Собсна вопросы:
1. Как сделать тут связи?
2. Как заполнить БД чем-нибудь?
Аноним 17/04/20 Птн 14:32:17 1659998582
image.png (419Кб, 524x524)
524x524
Как эти ебучие запросы мониторить? Чтоб просто терминал отдельный открыть, и у меня все
>SELECT suka FROM blyad FROM ja=pidoras;
там сразу отображались? Пиздос, неужели настолько юзабилити не продумано в этом говне?
Аноним 17/04/20 Птн 14:50:00 1660020583
>>1659998
Ладно, блядь, с этим разобрался. Но как посмотреть, что SQL отвечает? А то я ебал глазами парсить эти километровые генерированные запросы и думать да гадать, с какого хуя по таким юзерам у меня инфа приходит, а по таким - пустота. Будь у них очко share-ключами обколото...
Аноним 17/04/20 Птн 15:33:09 1660075584
ладно, идите вы нахуй, уже ничего не надо
Аноним 17/04/20 Птн 17:32:17 1660185585
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ СУКА НАХУЙ БЛЯДЬ РОТ ЕБАЛ ВАШЕГО MYSQL ЕБУЧЕГО СУКА НАХУЙ, ПОЧЕМУ ОН ДАЖЕ БАЗУ ДАННЫХ ДРОПНУТЬ
Д Р О П Н У Т Ь , К А Р Л ! ! !
НЕ МОЖЕТ, НЕ ПОТРАТИВ НА ПОЛНЕДЕЛИ МОЕЙ И БЕЗ ТОГО ВСРАТОЙ ЖИЗНИ-ТО НАХОЙ, А? А???? А БЛЯДЬ???!??!?!?!?!?!??!?!?!??!!
Аноним 17/04/20 Птн 17:35:56 1660188586
>>1660185
блядь, лог забыл выключить, чуть весь ссд-шник не забил к ебаной матери
Аноним 18/04/20 Суб 21:30:14 1661347587
Вечер добрый. Столкнулся с такой проблемой, могу подключиться к датабазе sqlexpress на моем компьютере с любого компьютера подключенного к этой же сети. Теперь вопрос, как сделать так, чтобы к этой датабазе можно было подключиться с любого компьютера через интернет. ВПН не предлагать
Аноним 19/04/20 Вск 01:05:35 1661483588
Мальчишки, делаю SaaS хуйню. Имеются 3 тарифа (3 записи в таблице тарифов). Пользователь оплачивает какой-нибудь тариф на месяц, но спустя пару дней понимает, что всё хуйня и хочет вернуть деньги. Система рассчитывает сумму возврата исходя из стоимости тарифа и количества неиспользованных дней. Но что, если в тот момент, когда пользователь передумал использовать сервис, я подниму стоимость тарифа в 2 раза. Получается, система вернет совсем другую сумму. Следовательно, надо где-то в другой таблице хранить данные о том, по какой цене пользователь покупал тариф. Получится много лишних данных.

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

Норм решение, какие подводные? Или может уже есть какие-то best practices для подобного?
Аноним 20/04/20 Пнд 15:09:25 1662918589
хай, ананасы!

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

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

как из первой таблицы найти записи нужных юзеров в указанном для него периоде? (для всех юзеров периоды, с date_start по date_end разные)
Аноним 21/04/20 Втр 01:30:37 1663447590
Ну что тут у вас. Изучать sqlex и через пол года вкат на 70к ещё актуально?
Аноним 22/04/20 Срд 00:20:12 1664151591
В чем хранить контент имиджборды?

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

Господа DBA, подскажите что выбрать? В базы данных умею слабо, по работе с динамкой только работал.
Аноним 23/04/20 Чтв 11:13:35 1665219592
3333.PNG (34Кб, 1184x355)
1184x355
>>1550921 (OP)
Добрейший вечерочек, господа апельсинусы. Делаю учебную хуйню про архитектурную организацию, сотворил модель данных.
Прогер во мне умер уже пару лет назад, память отлетела внахуй, но делать приходится. С инструментами разработки, можно сказать, уже не знаком, с тем, как подлезть к началу собственно реализации, тоже. Подскажите, чем делать БД и на чем быстро/удобно можно быстро намутить приложение для работы с этой самой БД?
Аноним 23/04/20 Чтв 21:51:56 1665893593
Аноны, прислали тестовое не на бд разраба но там есть задание про построить объектную модель данных с типами связей по описанию процесса. Я так понял это к ообд или как это называется? Как это делается? Лол я максимум, что про реакционные модели знаю.
Понятно, что тестовое я завалю просто интересно
Аноним 27/04/20 Пнд 19:00:17 1669386594
Бля, какие же хуесосы этот MySQL делали, я ебал... Элементарно не могу нагуглить, как переключаться между двумя базами под одним именем, чтоб не загружать-выгружать образ каждый раз, когда нужно поработать с бэкапом с продакшна и вернуться обратно на легкий дэвовский. Это пиздец, товарищи. Минус полчаса жизни, я не шучу нахуй.
Аноним 27/04/20 Пнд 19:07:12 1669395595
>>1669386
Алсо, эта хуета явно недоиспользует ресурс (RAM, CPU) моей пекарни, чтоб грузиться быстрее, блядь. Я не верю, что все в SSD упирается, там ведь гигабайт с небольшим всего, а грузится оно минут десять.
Аноним 28/04/20 Втр 01:56:26 1669767596
сап, двач
я тут хотела поинтересоваться, можно ли как-то увидеть удаленные из диалога (загруженные туда же) видео? поискала, в тырнетах пишут, что нужна прямая ссылка. как ее получить если само видео указывается пустым сообщением?
еще такая фишка, что если живешь в евросоюзе, они тебе обязаны предоставить при запросе группы, в которых ты админил и период, удаленные фотки и видео, голосовые и тд. можно ли это как-то наебать, или попросить кого-то из евросоюза с моей страницы вк запросить эти данные?
или, может, есть какие-то сайты, где какие-то уполномоченные люди сие замечательной социальной сети могли бы за отдельную денюжку предоставить эту инфу? кто знает?
Аноним 28/04/20 Втр 16:54:09 1670430597
Посоветуйте книгу по постгресу
30/04/20 Чтв 13:30:04 1672291598
>>1663447
Однозначно да, а то и больше. Всё по-прежнему, спрос на хороших скл-щиков большой, задания на собесах прежние.

>>1664151
любую субд реляционную. Если лично для себя делаешь, ставь Sql server developer, думаю, это лучшим решением будет, как минимум решение своих проблем сможешь быстро находить.
Аноним 30/04/20 Чтв 16:15:10 1672446599
>>1669767
Нахуй ты это спрашиваешь в теме по базам данных, дура?
Аноним 02/05/20 Суб 13:52:44 1674326600
>>1550921 (OP)
Узнал чтота же Postgres связывается с приложениями через сокеты (как правило порт 5432), есть ли люди которые ставят эту БД на удаленном сервере, а не на localhost? В принципе так можно делать, но ебучие HTTP-запросы ведь идут пиздец как долго. Есть ли резон так делать?
Аноним 02/05/20 Суб 21:29:19 1674785601
>>1674326
Если для тебя критично, что запросы из бд идут "пиздец как долго", то скорее всего проблема в твоей архитектуре.
Я не ванга и не знаю, что ты там делаешь, но можешь попробовать к своему приложению какой-нибудь кэш прикрутить, или типа того.
Вообще, в индустрии все давно на микросервисах с HTTP, и ничего, как-то живут люди.
Аноним 02/05/20 Суб 21:34:57 1674793602
Аноним 02/05/20 Суб 21:36:17 1674795603
>>1674793
Хотя, если тебе бд нужна как внутреннее хранилище данных приложения, то вместо Postgres возьми идущую в качестве батареек к питону sqlite3
Аноним 03/05/20 Вск 12:37:31 1675282604
В той самой книге Дейта сказано (глава 3.2) что в СУБД нет никаких указателей, связывающих одну таблицу с другой, а есть только явное задание значений, помещенных в позиции столбцов и строк таблицы Это и сейчас правда? (книга-то в 70х еще издавалась)
Аноним 04/05/20 Пнд 18:28:35 1676464605
>>1674793
Бля, спасибо, отдуши. Класс, сам в этом направлении двигаться и начал.
Аноним 05/05/20 Втр 19:58:52 1678042606
>>1000000
Аноним 05/05/20 Втр 19:59:21 1678044607
>>1111111
Аноним 05/05/20 Втр 19:59:43 1678045608
>>1234567
Аноним 05/05/20 Втр 21:16:27 1678158609
Аноним 06/05/20 Срд 14:50:07 1678710610
>>1662918
Охуенные вводные, братан.

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

Я, конечно, добоеб и может чего не знаю, но тебе нужно будет писать отдельный запрос под каждого юзера при помощи UNION
Аноним 06/05/20 Срд 20:03:57 1679054611
250w.jpg (18Кб, 250x328)
250x328
Норм книжка чтобы базы данных поизучать? Так понимаю, что sqlite легче всего разворачивать и в ней не только о нем, а вообще о SQL и том как БД проектировать.
Аноним 06/05/20 Срд 20:07:10 1679057612
Суп БДач.
Можешь подсказать по хардкору:
Хочу сделать бота с кусрами в образовательных целях, но хочу сделать все максимально правильно.

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

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

Вот я немного подустал думать какую же базу взять. SQL или NoSQL.
06/05/20 Срд 23:36:51 1679163613
>>1679057
Очень просто.

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

Плюс почти все реляционки сейчас умеют в json, так что вообще особо не вижу проблем использоать mysql/postgres/ms sql.
там хотя бы структура понятная будет.
Аноним 07/05/20 Чтв 02:45:23 1679237614
Есть одна таблица с чеками, что-то вроде:

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

Нужно разбирать по минутам, т.е.
Покупка1 длилась 30 минут, это по 10р минуту, т.е. одна строка должна превратиться в 30 строк по 10р.
Как это можно реализовать?
Аноним 07/05/20 Чтв 08:23:27 1679323615
>>1679237
Хуя у тебя задачи всратые
Аноним 07/05/20 Чтв 14:46:30 1679666616
>>1679163
Ну я понемногу на этом и начал сходиться. В общем с реляционной никаких проблем не будет. Спасибо.

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

Аноним 07/05/20 Чтв 14:49:39 1679672617
>>1679666
> модели
Таблицы, простите. Забыл в каком я треде.
Аноним 07/05/20 Чтв 23:50:51 1680364618
>>1679237
Ну так построй рекрсивно поминутный набор дат и сджойни его со своей таблицей.
Другого варианта "размножить" строки за 2.5 года я так и не придумал.
Аноним 08/05/20 Птн 04:09:19 1680487619
>>1680364
Ну хз, мне не разово это делать, плюс там длительность может быть больше часа, не хранить же сутки в минутах . Пока рассматриваю вариант делать apply на цикл с while, но что-то выглядит как костыль, и по реализации есть ряд вопросов.
Аноним 08/05/20 Птн 17:40:59 1681081620
Ребятки, совсем убил меня этот SQL, помогите плиз.

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

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

Как быть? Можно какой-то справочник создать отдельный, типа Ид Пользователя - Ид Ресурса - Алиас этого Ресурса? Или какой индекс на несколько таблиц, но я хз как оно делается и можно ли это? Куда хоть копать, что гуглить?
Аноним 08/05/20 Птн 19:39:51 1681371621
Представим, есть две примитивные одноколоночные таблицы:

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

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

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

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

Что-то типа DELETE FROM a WHERE url LIKE '%'+(SELECT host FROM b)+'%', но чтобы было не плодом моей фантазии.
Аноним 08/05/20 Птн 21:28:16 1681528622
44 — копия.PNG (20Кб, 595x520)
595x520
>>1550921 (OP)
Сап, покажете пример решения? Всего заданий много, но мне хотя бы пример одного увидеть.
Я так понял "весят больше чем родитель" - это нужен подзапрос. Но как мне реализовать в запросе связь между животными и их родителями?
Аноним 09/05/20 Суб 06:02:03 1681797623
>>1681081
Составной ключ сделай. Модно вобще хэш вычислять и добавлять индкс. Либо в одной из таблиц генерацию делай не с 1(ну тут важно не обосраться потом)
Аноним 10/05/20 Вск 09:43:38 1682854624
>>1681528
Держи
SELECT name
FROM animals as child
WHERE weight>
(SELECT weight
FROM animals as parents
WHERE parents.parent_id=child.parent_id)

>>1681371
В общем виде
DELETE FROM tableA
WHERE ROWID IN
( SELECT ROWID
FROM tableA b
WHERE УСЛОВИЕ(Тут можно селект к первой таблице
);
НО, если у тебя таблицы большие тебе придётся сравнивать урлы полнотекстовым поиском, а это пиздец. Как вариант сделать им INTERSECT и по нему уже делать удаление. Ну или если тебе нужно просто уникальные записи сделать EXСРТ ну тут хз как лучше, помоему это говно тоже весьма затратное по ресурсам

Аноним 10/05/20 Вск 10:26:58 1682880625
>>1682854
самофикс
WHERE parents.id=child.parent_id
Аноним 10/05/20 Вск 13:02:46 1683031626
>>1681797
я нубас полный) сейчас курю мануалы, но идёт тяжело без примера
>>1682854
таблицы все что на скрине, маленькие
>>1682880
сейчас поразбираюсь в твоём решении, спасибо
Аноним 11/05/20 Пнд 11:55:08 1683830627
Аноним 12/05/20 Втр 20:13:07 1685716628
Аноним 12/05/20 Втр 20:13:28 1685717629
>>1685716
Кто сдавал, чё посоветуете?
Аноним 12/05/20 Втр 20:52:02 1685765630
В чем смысл нескольких PRIMARY KEY?.. Разве он не должен быть только один в таблице?
Аноним 13/05/20 Срд 14:04:38 1686486631
>>1685765
Даже больше тебе скажу, не может быть нескольких pk на одной таблице.

Можнт быть составной PK (из нескольки колонок)
Аноним 13/05/20 Срд 21:41:59 1687176632
>>1686486
Тихо, не пали контору, он особенный.
Аноним 14/05/20 Чтв 00:27:09 1687288633
>>1563202
лол. ну дак оракл закешировала части запросов ну и выдает тебе их мгновенно.
ты бы сравнил лучше запросы разного характера исполняемые параллельно с разными данными.
Аноним 15/05/20 Птн 23:31:59 1689731634
Снимок экрана 2[...].png (494Кб, 2096x1800)
2096x1800
.
Now you'll see why we needed groups: to look for specific values in a particular part of the DataFrame. We'll use our new function, but first we need to think of an argument. Let's group the DataFrame by the user_id column, so group_name will represent the user and the corresponding piece of data will be handled by the group_data variable. Now that we've decided what data to use as the argument, we can save it to genre_grouping .
Call the get_heavy_listener function and pass genre_grouping as its argument. Save the result in the user_id variable and print it. Note that the algorithm is not perfect: as soon as it finds a user with 50+ listens, it stops searching. But here we have at least one of our unknown music lovers! Аноны вообще не понимаю задания - помогите
Аноним 17/05/20 Вск 12:37:57 1691439635
screen0101.png (74Кб, 683x436)
683x436
Как "читать" эту таблицу? Связи показывают внешние ключи к другим таблицам, но почему их блин так много, в citizens.import_id их вообще 3 штуки, а некоторые еще и выделены красным?
Аноним 17/05/20 Вск 16:16:37 1691761636
Аноним 17/05/20 Вск 19:47:54 1692109637
>>1691761
А почему вдруг там красным что-то выделено? От relations.import_id аж 2 связи в citizens.import_id идут. С фига ли?
Аноним 18/05/20 Пнд 15:32:24 1692900638
>>1692109
Потому-что ты пидор
Аноним 20/05/20 Срд 10:57:05 1694756639
На кой иногда делают отдельные таблицы с одним единственным полем? Например есть таблица Category где одно поле - NAME VARCHAR? Вот нахрена? Почему имя категории нельзя засунуть в ту же таблицу, к которой категории и относятся, скажем это таблица Games?
Аноним 20/05/20 Срд 11:08:28 1694781640
>>1550921 (OP)
Анон, посоветуй годный курс по БД. Устраиваю себе интенсив перед завтрашним собесом. Ранее БД нюхал, на уровне join'ов, но даже их мне лучше повторить. Про индексы только слышал.
Аноним 20/05/20 Срд 11:22:33 1694813641
Аноним 20/05/20 Срд 11:22:56 1694815642
>>1694813
Только надо смотреть на скорости х2, а то разговаривает ну уж очень медленно.
Аноним 20/05/20 Срд 11:29:31 1694826643
>>1694781
Куда устраиваешься, если не секрет?
Аноним 20/05/20 Срд 11:32:56 1694829644
>>1694826
Секрет, вдруг ты меня завтра будешь собеседовать и такой - "ага, знаю я тебя, двощер, пиздец тебе"
Аноним 20/05/20 Срд 11:37:41 1694832645
>>1694813
Спасибо, анонче, сейчас буду искать.
Аноним 21/05/20 Чтв 19:15:09 1696648646
Я немного новичок в sql. Подскажите, пожалуйста, вот есть у меня 2 таблицы,table1 и table2. И там и там одинаковое поле id. Как мне посмотреть на все данные правильно в этих таблицах без лишнего мусора? Обычным селектом я получаю 2 столбца id, которые еще и не равны друг другу и мне надо указывать id, который принадлежит определенной таблице, чтобы использовать его - table2.id.
Аноним 21/05/20 Чтв 22:32:03 1696888647
Памахите. Вот есть столбец в таблице с 10 миллионами записей. В ней есть столбец в котором хранится всего 15 видов значений - числа от 1 до 15, для каждой записи одно из этих чисел в этой колонке в общем.
Допустим я хочу сделать order by по этому столбцу. Насколько дольше будет выполняться запрос с order by чем без него? Это вообще существенная величина или нет?
Аноним 22/05/20 Птн 01:32:04 1697143648
>>1696888
Существенно дольше. Есди есть индекс, то тнет.
Аноним 22/05/20 Птн 22:55:14 1698350649
>>1697143
> Есди есть индекс, то тнет.
Но я в 3 разных статьях читал, что индексы навешивать имеет смысл только если значения в колонках уникальные. Если там очень много повторяющихся, то смысла в индексе большого нету. Это соответствует действительности?
Аноним 23/05/20 Суб 15:11:05 1698877650
Есть кто работал с SQLite?
У меня в таблицах первичным ключом будет поле с GUID вместо числового с автоинкриментом.
Подскажите, как лучше таблицы создать с опцией WITHOUT ROWID или без нее в этой ситуации?
Это опция позволяет делать поле, которое является первичным ключом, кластерным индексом.
Без этой опции у каждой таблицы создается числовое поле ROWID которое и будет счиаться кластерным индексоа.

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

Но говорят что использование гуида в качестве кластерного индекса повышает фрагментацию на диске и что база разбухает быстро от этого
Правда это статься про MS SQL Server, не знаю насколько это применимо к SQLite
https://www.sqlskills.com/blogs/kimberly/guids-as-primary-keys-andor-the-clustering-key/
Аноним 23/05/20 Суб 15:57:27 1698910651
Прочитал "Изучаем SQL" Алана Бьюли, очень понравилась. Теперь нужно перейти на углубленное изучение PostgreSQL, посоветуйте, пожалуйста, лучшую книгу для этого. Желательно, похожую на книгу Бьюли.
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов