В этом итт ай-ти треде собираются все любители Баз данных, гордо именующие себя айтишниками.Доказываем друг другу, что >SELECT ID FROM b_entity_tvoya_mamaэто тоже программирование, Креэйтим индексы на одно и то же поле по 100 раз и инклудим в них всякие поля на всякий случай,Храним gender в NVARCHAR(2000),Поясняем, как можно без задней мысли хранить бизнес-логику в бд, а не в приложении,Рассказываем, как обновлять хранилище данных актуальными real-time данными раз в минуту,Называем логично и понятно поля в логичных и понятных таблицах>CREATE TABLE tablica_s_clientami (>ID_CLIENTA INT NOT NULL>IMYA NTEXT,>"DATA ROJDENIYA" NVARCHAR(MAX))Ну и, конечно же, выбираем лудшую СУБД для всего:MY SQLMS SQLPostgreSQLORACLEMongoDBSQLiteExcelИ даже Google Docs!В общем, это очередной баз данных тред.
>>973923 (OP)>SQLite>Храним gender в NVARCHAR(2000)Поэтому SQLite лудшая. Строки хранит не фиксированного размера. Как и числа.
>>973979Кстати, да, никогда не понимал, почему у всех языков программирования есть один тип данных string, а в Бд char nchar varchar nvarchar text ntext хуита какая-то.
>>973990В С++ как минимум три типа "строк": std::string, char* и char[]. Разница в основном будет при оптимизации перформанса. Исторически, если тебе был известен размер одной записи, и этот размер был фиксированным, ты мог очень просто выбрать n-ную запись просто сместив указатель. Если размер записи варьируется - хуй ты так всё просто сделаешь. varchar(max) и text в современных базах как правило - синонимы.
>>973990Оптимизация.
Full text search реализуется COINTAINS?
Что они имеют ввиду, когда говорят "search TABLE on the FIELD"? Это как?
>>974059тебе надо захуячить полнотекстовый поиск по полю name таблицы продукт. Альсо, в квере должен быть использована функция to_tsvector и to_tsquery. Ебашишь индекс, пилишь кверю полнотекстовую https://www.postgresql.org/docs/9.5/static/textsearch-tables.html#TEXTSEARCH-TABLES-INDEX
>>974059Вангую, что >искать подстроку Awsome по колонке name в таблице Product.
>>974064>>974062Понял, спасибо. Буду пытаться. Чот сложный этот ваше Postgres.. Я прост хотел SQL потренить, а они мне хуйню свою пихают, я бы лайком заебашил и все, епта, похуй на оптимизацию.
>>974067А чо за треня? Я тут как и многие, собираю сайты с тренями, которые не буду проходить.
>>974091codewars.com
>>974094Спс.
Посоветуй сайты/книжки/курсы про проектированию БД, у вас в шапке нихуя нет.
http://ideone.com/RT3vJWЧто я делаю не так? Он в как-то неправильно COUNT делает.
Абуша ебанутый?
>>974196Ссылочку на задание кинь.
>>974206https://www.codewars.com/kata/sql-bug-fixing-fix-the-query-totaling/train/sql
Вот так нормально работает, мне подсказали, что группировка без DATE() группирует по каждой секунде. Поэтому надо использовать DATE() в группировке.
>>974196Ещё можно было написать s.transaction_date::date. Вот пытался вдуплить, почему твоё решение не работало.
>>974214Ах да, в postgresql можно писать просто group by day. Православный MS SQL так не умеет.
>>974218Да, можно группировать по алиасу. А разве в МС так нельзя?
>>974222Не, не умеет. Доки мелкософта и слезы бедолаг на stackoverflow это подтверждают.
ВЫБРАТЬ *ИЗ Справочник. НоменклатураОсвятил.
>>9742681С-оБог?
>>974285Конечно. Спецназ мира DBA.
>>974371Вот скажи, у 1С свой движок бд и интерпритатор запросов или же они эти "Выбрать из" транслируют в какую-то субд, типа postgre?
>>974884http://v8.1c.ru/overview/Term_000000662.htm
Ребят, подскажите, как выполнить следующую вещь:TABLEmonth sells1 102 203 30Результат должен быть такой:month sells1 102 303 60Понимаю, что селфджоинить надо, но не могу допереть, как именно.
>>975179А по какому правилу/формуле должны меняться sells?
>>975187Приплюсовываться значения должны102030=1010 + 2010 + 20 + 30
>>975179>sum(sells) over (order by month rows between unbounded preceding and current row)t. несчастная фулл-стек макака с зарплатой 45к
>>975200Не очень врубаю в твое решение. Я думаю, что вот так может быть: SELECT b.sell, SUM(a.sell) AS cum_sell FROM TABLE1 a, TABLE1 b WHERE a.month <= b.month GROUP BY b.month, b.sell
>>975203А что там сложного: http://rextester.com/YAFPJ99445?Считаешь сумму в окне от первого до текущего кортежа, отсортированном по месяцу для предсказуемого результата.God bless Oracle.
>>975251Не, я на чистом sql хотел. не могу пока в эти ваши синтаксисы..Вот пикрил мне понятен!
>>975251И постгрес http://rextester.com/BSTM28097
>>975255Ну в православном тоже это всё есть.
>>975251По-моему, я тут генерю большую часть постов.Слушайте, есть такая таблица с двумя колонками:c1 c2a 3a 4b 5b 6Мне надо получить вот такой вывод:c1 c2a 12b 30Помогите плиз. Тут вообще нет идей, как сделать.inb4 не твой личный стек оверфлоу
>>975259Надеюсь, понятно, что 34 = 12, 56 = 30.
>>975260бля 3х4=12, 5х6=30
>>975255Это здорово, например, но не на mock-таблица можно внезапно встретить проблемы с производительностью у self-join'ов. Аналитические функции такого изъяна лишены.Например, http://stackoverflow.com/questions/16870336/how-to-tune-self-join-query-in-oracle-11g и http://dbaforums.org/oracle/index.php?showtopic=6184.Ну и ещё на реальных примерах, скорее всего, выбирать ты будешь не два поля, а, значит, либо придётся убирать эту помойку в дополнительный подзапрос, либо копипастить километровый group by c очевидным эффектом.
>>975259http://rextester.com/UGDE88643
>>975265Спасибо. Я понял, как работает функция, да. Так намного проще, но нет ли идей, как это на чистом SQL реализовать?
>>975259Это было сложно: https://pastebin.com/M8J56Lp5 .
>>975268https://www.codeproject.com/Articles/548395/The-Product-Aggregate-in-T-SQL-Versus-the-CLR
>>975270Спасибо. Да уж, выглядит как пиздец какой-то. Но большое спасибо!Кстати, что можешь посоветовать почитать/порешать?codewars решаю, sql-ex решаю, но как-то туго пока идет
>>975271Да, я nullif для нуля проебал.>>975272SQL Cookbook для начала. Дальше зависит от того, каким именно диалектом пользоваться будешь. Для Оракла ничего лучше Тома Кайта нет, наверное.
Я решил это задание по-другому. Оно будет не ОК работать с отриц. знач., но у мекня условие, что вторая колонка имеет положительные значения:
Общий случай решения:
>>975304Ебать ты наркоман.
>>975308Скудность знания порождает изощренные решения.
>>975309Это дичь, оно не работает. Тебе с примером не повезло.
>>975310>оно не работаетПочему? Я же получил ответ
>>975312Ещё по строке к a и b добавь.
>>975313Да, дичь выходит. Какой же я тупой, хосспаде.
>>975268Вообще-то, оконные функции - это T-SQL, они не реализованы только в уебищном MySql, но это уже проблема этой субд, что она не поддерживает станадрт полностью.Умение использовать оконные (аналитические) функции тебя на любом собеседовании на разработчика бд/аналитика по отчетности спросят, гарантирую, как опытный ходитель по этим самвм собеседованиям.
>>975325Я на аналитика собеседуюсь.Пойду курить SQL Cookbook. Чет расстроился со своей тупизны в последнем примере.Анон с логарифмом нормально предложил.lgxy = lgx + lgy;f(lgx, lgy)f(x,y) = 10
>>975330Только если реально будешь юзать, не забудь про nullif(field, 0) вокруг аргумента логарифма.
>>975331select qwe, exp(log(sum(asdd)) as aggregate_productfrom tgroup by qwe;где мне учесть этот nullif?
Разобрался!select qwe, nullif(exp(sum(log(asd))),0) as totalfrom tgroup by qwe;
>>975272Больше задавай вопросов человеку, который не пишет ключевое слово AS перед алиасом в селекте.
>>975356Какой полезный нуллиф. Один дебс посоветовал, другой ищет куда-бы впихнуть.
>>975552>>975526А вот и toxic-чмохи без конструктива подкатили. Вместо того, чтобы человеку помочь, только пердите в лужу, мамины админы mysql на localhost.>>975526Во-первых, AS опциональный в SQL-92.Во-вторых, это дело принятого в вашей компании код-стайла.В-третьих, единственный аргумент в пользу этого бесполезного говна мамонта — backward compatibility, в моём случае это неинтересно.>>975552Выполни-ка select log(x, 0) from dual. Это ты бесполезный, а не nullif.
>>975356nullif должен быть вокруг аргумента log(), чтобы в случае, если он равен нулю, подставлялся null. А нужно это потому, что логарифм от нуля не существует — нет такой степени, в которую надо возвести основание, чтобы получить ноль.
>>975762Пруфы.
Довольно много работал с фаербердом. Под него есть божественная ide ibexpert. Решил познакомиться с постгресом, посоветуйте что-нибудь хорошее на подобие.
>>975838очевидный pgAdmin
>>975977Неужели это верх инженерной мысли?
>>976025Я psql cli использую. Да, я мазохист.
>>975838DataGrip (хотя бы не такая багованная, как пгадмин ебанный)
>>975742От какого значения ты собрался защититься своим нуллифом? От нуля? А почему не от -18?Ну а про AS такой глупой макаке даже и пытаться пояснять бесполезно.
Есть разница в скорости выборки между postgres и mongo?
>>977630Не узнаешь, пока не проверишь, что тебе надо.
>>977639Ну это понятно. Но вот это нормально вообще>Count: 3230567 >Time: 5.378092123sДва запроса, select count() from table и select from table where condition like '%пизд%';
Проебал разметку
>>977641По скорости? Мне кажется, что да, в пределах нормы. Чудес от других баз не жди.
>>977641Вот тут ещё можно глянуть. Под like нужны специальные индексы, чтобы ускориться.http://stackoverflow.com/questions/1566717/postgresql-like-query-performance-variations
Ребят, на sql-ex.ru есть одна задачка, в ней нужно отобразить выборку вертикально (на пике)http://sql-ex.ru/exercises/index.php?act=learn&LN=41#resPlaceКаким образом это можно сделать менее костыльно? Интересуют MySQL и PostgreSQL.Моё ужасное решение примерно выглядит так:select 'cd', cd from pcwhere code = (select max(code) from pc)unionselect 'hd', hd from pcwhere code = (select max(code) from pc)...и так для каждого столбца.
>>977953Pivot
>>977961А PIVOT/UNPIVOT есть в MySQL/PostgreSQL?Ещё попытался занести результат select max(code) from pc в переменную через DECLARE, чтобы к ней потом обращаться, но беда в том, что sql-ex.ru почему-то требует, чтобы мой запрос начинался с SELECT'a.
>>977964Pivot есть в PostgreSQL:https://www.postgresql.org/docs/9.1/static/tablefunc.html
>>977961Пивот от анпивота не отличаешь?>>977964Нет в постгресе того, что тебе нужно, делай с юнионами. И код отдельно тебе не нужен, нужно выбрать требуемую строчку (с тем самым кодом) и с ней работать.
Анон, поясните за постгрес. Им кто-то сейчас пользуется? Какая у него сфера деятельности, для чего его лучше использовать, чем он лучше мусклес? Я просто из кейсов только сервер для аллодов онлайн видел и все.
>>978107Стильно, модно, молодёжно. Всё, что я знаю.ms-sql-работяга
>>978086Спасибо, так лучше? Решение засчитали на сайте.
postgres. таблицыdiaries(id, name)diary_entries(id, diary_id, content)если CREATE TABLE diary_entries.. id SERIAL.. diary_id INTпри добавлении записи, id инкрементируется:INSERT (diary_id) VALUES (1)INSERT (diary_id) VALUES (1)INSERT (diary_id) VALUES (2)теперь:SELECT diary_id, id FROM diary_entries;1, 11, 22, 3нужно что бы diary_entries(id) начинался с 1 для разных diaries. пример:SELECT diary_id, id FROM diary_entries WHERE diary_id = 1;1, 11, 21, 3SELECT diary_id, id FROM diary_entries WHERE diary_id = 2;2, 12, 22, 3как? не советуйте инкрементировать в программе, хотелось бы что бы это было в суб
>>978392хуй с ним. не хочу ебаться с процедурами и тригерами. думал, может есть специальный тип или что еще SERIAL_DEPENDENT(diary_id, id)
>>978392когда создаешь новый дневник создай секвецию с идентификатором дневника, затем при добавление записи в дневник номер записи бери из секвенции.
>>978392вам в оконные функции
>>978410спасибо.CREATE SEQUENCE diary_1_entries_seq;INSERT INTO diary_entries (diary_id, id) VALUES(1, nextval(diary_1_entries_seq));
>>973923 (OP)Суп аноны, на хостинге сайт, часто выскакивает пик. Кто виноват?простой юзер
>>978568течет
>>978575Что течет? Это важно помоги.
>>978568https://www.google.ru/search?q=if+you+are+not+out+of+available+memory
>>978685Сайт на сервере бомжа ясно.
>>978844Грит уменьшить нагрузку, бля да там 100 записей достать сука бля.
>>978117Зачем ты пиздишь? Решение нерабочее в принципе.
>>979091Не злись, я для MySQL решаю.Если не веришь, то вот задача: http://sql-ex.ru/exercises/index.php?act=learn&LN=41#resPlaceТам есть "Select DBMS", выбери MySQL и вбей этот код: https://pastebin.com/Mfg6TQZx
>>979097Понял, извиняюсь.
Поясните, пожалуйста. Есть таблица, пикрелейтед. Как выбрать строки например со значениями "меньше .200" после точки перед последним значением? Как вообще выбирать такие строки, если критерий выбора - значение конкретной части строки, причем не точное, а в заданном диапазоне, н-р "от 100 до 200"?
>>979155В MS SQL есть для этого DATEPART.https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql
>>979162Да, это то, что нужно - выбор по секундам, миллисекундам и т.д. А в SQLite ничего похожего нет?
>>979155в селекте сплить строку потом в тайм стэмп дату транкуй в 1970-ый год, в кондишан части фильтруй по тайм рэгджу, затем в селекте добавь вывод оригинального столбца, вот тебе и нужный вывод.
>>979166в лайте вроде нет дэйттаймов, можно попробовать отсабстрингать правую часть и по ней фильтрануть.
>>979181 в лайте вообще нет смысла заморачиваться с любой обработкой. это все всеравно на части сервера, который читает файл выполнится. поэтому если бэк енд вменяемый, то делай все там.
>>979183>>979181>>979180Думаю, мне проще сразу мокрософт SQL-сервер накатить. Этих таблиц будет штук 30, и все они 500+Мб csv файлы. Спасибо еще раз :3
>>979155substr('20170301 00:00:00.865', 19)
>>973923 (OP)>Рассказываем, как обновлять хранилище данных актуальными real-time данными раз в минуту,А вот с этого места по подробнее плиз
>>979317Без задней мысли.
>>979319>>979320Ну бле, ребята.А если по серьезному?
>>977953Как же я бугурчу от таких задач, типа транспонируйте таблицу, заебашьте сводную sql-запросом. Вот нахуя это реализовывать заебным PIVOT/UNPIVOT в mssql, может есть субд где pivot легкий и удобный? ? Я конечно может слегка тупой, но в сотню раз проще выгрузить все в эксель и вертеть таблицы как душе угодно.По сути, кроме группировки и джойнов sql не нужен. мимо-аналитик
>>979317Очень просто (надеюсь, что, что такое хранилище, рассказывать не нужно), это называется инкрементальной загрузкой данных. Для этого в первоисточнике (откуда грузим в двх а к а HRANILISHЕ) должен быть признак того, что запись изменена - update_date или же нужна уверенность в том, что данные в первоисточнике статичные и вовсе не меняются, а только добавляются новые, причем с идентификатором-инкрементом (Identity), в таком случае нам не нужно каждый раз грузить все 10000000 строк, а выбрать из них только те, у которых update_date >= update_date той же сущности у нас в хранилище. (Или id источника >=id в хранилище), теперь, когда мы их выбрали, нам нужно все это дело смэтчить (в скл сервере для этого юзают MERGE) но можно и обычными update - insert с проверками на существование записи у нас в хранилище. Если есть - апдейтим, если нет - инсертим.
>>979359А если данные нужны не аналитику, а какому-нибудь другому приложению с доступом через API со строгой спецификацией? Тоже Excel-файлик отдавать будешь? Нет, ты используешь анпайвот при необходимости, чтобы привести их в треюуемый вид для удобной обработки back-end приложением.
>>979361Давай подробности о построении SSIS пакета. Insert там есть оче быстрый, это все круто, update же - увы нет. Наиболее оптимальный вариант который удалось нагуглить - делать Staging таблицу, отправлять туда данные которые надо будет проапдейтить, а потом из нее выполнить batch update. Но блин, это получается на каждую мигрируемую таблицу надо иметь свою Staging таблицу, какое-то не очень хорошее решение. Вообще стремно что разрабы SSIS такого не предусмотрели, либо ест ьсекретка какая?
>>979392Держи.Я юзаю такой шаблон для инкрементального обновления.Есть бд Staging, как ты правильно отметил, есть боевая с полными данными. В стеджинг сущности, как раз, грузятся кучосками по update date или id.Есть таблица staging_entity, в которой хранится описание сущностей и их последние даты и айдишники (опционально)обновления, чтобы на их основе строить запрос к источнику.Add new staging entity - добавляет новую сущность в таблицу на основе переменных, которые не воези в скрин с айпада на рдп.Import started и import finished - небольшие скрипты, которые просто пишут системное время сервера для логов.Staging prepare - процедура, к которой на вход отправляется айдишник сущнсоти staging_entity, в сотстветствии с которым определяется таблица в стеджинге, которую нужно очистить перед заливкой в нее данных.staging import - дата флоу, в котором подставляется полученная из get import details последняя дата обновления сущности (или айдишник) через экспрешены в виде "SELECT id, update_date, name, value FROM ololol WHERE " + (а тут переменная, которая тоже делается через экспрешн, который мне западло писать, но, думаю, ты и так поймешь), В результате получается "SELECT id, update_date, name, value FROM ololol WHERE update_date >= '20170101 14:03:21'"Ну и результат этого запроса уже грузится в стейджинг.attempt succeded/failed - скрипты, которые проверяют, успешно ли прошел импорт. Если безуспешно, то в лупе (bulk insert attempts) начинается новая итерация после пятисекундного ожидания, вдруг подключение недоступно было некоторое время?)main load - процедура, которая грузит данные из стейджинга уже в хранилище. В основном, это мерджи, состоящие из when matched then update, when not matched then insertImport failed - тоже для логов.Finilize import - процедура, которая выбирает из стеджинга последнюю дату обновления (или айдишник) и пишет в таблицу с сущностями в стейджинге, из которой их в следующем запуске опять прочитает get import details.Инб4: ошибка в датафлоу - всего лишь следствие того, что это шаблон для пакета, в котором еще не настроено подключение.
>>979446Правильно ли я понимаю, что пакет со скрина выполняет обновления по разным таблицам (представленным в staging_entity)? Эдакий универсальный скрипт?Еще такой вопрос по перформансу. Как часто запускается пакет и сколько по времени выполняется?
>>979446И еще такой вопрос. У тебя заведены отдельные скрипты для формирования записей в лог. Пользуешься ли тем что SSIS генерирует сам? Я имею в виду вьюху catalog.operations и catalog.operation_messages в базе SSISDB. Или скрипты логирования просто пишут дополнительную инфу помимо того что предсотавляет SSIS?
>>979475>Правильно ли я понимаю, что пакет со скрина выполняет обновления по разным таблицам (представленным в staging_entity)? Эдакий универсальный скрипт?Нет, такого в ссис не завезли, так что по этому шаблону создаются новые пакеты (их можно объединить по сущностям, если у них одна дата обновления, например, "документ" и "пакет документов" из 1С, тогда пакет один, а в датафлоу сразу несколько движений данных.Но, в основном, просто до хуя пакетов.>>979479Скрипты, конечно, свои, ибо так удобнее и все кастомизируемо. Пакеты добавляются пачками в другие пакеты, которые имеют название hourly_updatable_tables или daily_updatable_tables, например. А те, в свою очередь, уже запускаются соответствующими джобами по требуемым расписаниям.
>>979475А по времени работы:Если нету ебанутых НЕОБХОДИМЫХ полей с джейсонами и иксэмэлями длинной по 50000 символов, то грузится все очень быстро - буквально секунд за 15.Но, все равно, это отстой, ибо по дефолту двх обновляется 1 раз в день, а такая вот хуйня приводит к локам, которые выстраиваются в очереди: пока кто-то там что-то селектит из твоей таблицы, хер ты ее смержишь, а после мерджа кто-нибудь опять уже хочет выполнить селект и т.п.Но реалии бизнеса требуют вот таких вот танцев вокруг пепелища.
>>979490Это да, у нас в организации выставлено требование - пакеты должны запускаться раз в 15 секунд, соответственно время выполнения должно быть совсем маленьким. Сейчас удалось свести время выполнения к 3 секундам, благо что новых данных не так много.
>>979365
>>979520Отлично же.
>>979554Важнота
Появилось у меня желание создать процекдуру для мониторинга одной очень важной хрени.Суть - есть некоторые данные. Эти данные должны равномерно распределятся по некоторому набору таблиц. Мне нужно знать в состояние каждой порции данных.Т.е. в каждой таблице могу быть записи с определенным id - первое состояниеДанные с этим id есть в некоторых таблицах - вторрое состояниеДанных с таким id нет ни в одной из таблиц - третье состояниеПока таблиц всего 10 штук. На интуитивном уровне я понимаю что делается это просто - надо просто по очереди проверить есть ли в каждой из таблиц нужный id, потом срапвнить число положительных ответов с числом таблиц и вернуть один из трех ответов. На каком нибудь шарпе я бы это написал за 5 минут. Но вот на sql что то не соображу как это реализовать.
>>979693Если хочешь сварганить динамически на уровне sql-сервера, то в помощь динамик sql. Я так понимаю, количество таблиц будет только увеличиваться.Делаешь таблицу с таблицами (лол), далее делаешь переменную @sql_query nvarchar(max) = 'SELECT 1 WHERE EXISTS (SELECT 1 FROM 'Далее херачишь цикл, в котором проходишь по строкам созданной таблицы и имя таблица добавляешь к переменной, а потом вызывешь этот запрос с сам через EXEC sql_query или через EXEC sp_execute_sql, ну а дальше ты, думаю, разберешься.
Почаны, где токены в бд лучше всего хранить?
Ещё нубский вопрос, вот есть таблица со значениями1432Из неё нужно получить1 24 null3 42 3То есть поставить в соответствие каждой из цифр самую близкую из больших. Я делаю такselect b1.id, (select min(id) from b where id > b1.id) from b b1GROUP BY idНо можно ли как-то одним джойном?
>>980263Ещё вот так решил:select b1.id, min(b2.id) from b b1left join b b2 on b1.id < b2.idgroup by b1.idНо по-прежнему буду рад вашим предложениям.
>>980266mssql:select id, lead(id) over(order by id)from #mytmpgroup by id
>>979621Так то да, но если объемы данных на каждой инвокации пакета будут расти то и время выполнения будет увеличиваться.Ну и спрашивал еще чтоб сравнить как у других, а то DW и прочим связанным начал заниматься в текущей конторе и опыта еще маловато.
Вопрос про группировки по времени. Есть некоторая таблица заказов, заказы распределены по времени не равномерно.Задача: 1. Сгруппировать суммы заказов, скажем, по дням 2. Поскольку распределение не равномерное то могут быть дни когда заказов не было совсем, однако в конечной выборке должны присутствовать все дни без перерывов, а напротив тех дней в которые заказов не было ставить null3. Выборка может быть отфильтрована по любому из полей таблицы заказовНашлось решение через подзапрос (или еще пизже через CTE). Делаем основной запрос с группировкой по дня, получаем на выходе почти готовую выборку но с пропущенными днями. Далее результат обертывается как подзапрос (или же вьюха в CTE) и к нему джойнится непрерывный список дней (либо генерим на лету, либо берем из таблицы времени), т.о. получаем как раз то что нужно.Однако может есть еще хорошие решения?
>>980360А нельзя просто выбрать все заказы включая нулевые поля? Выглядит как говнокод
>>980364Что это значит вообще?
[Postgres] Обязательно ли для каждой колонки указывать тип? Нельзя сделать как-то так >CREATE TABLE 2ch (1,2,3,4,5 int, q,w,e,r,t,y char);?
>>980357Ну расскажи, как у вас тогда, что ты, как фуфел?
>>980360Двачую, однако принято наоборот делать.Сначала рекурсивно создаем времянной диапазон, удовлетворяющий нашим нуждам, а потом к нему лефт джойном прихуячиваем сгруппированный подзапрос (или врем. Таблицу) с заказами. Все ок.
>>980364Ну для тебя, такого нелюбителя говнокода, поясгю на примере:В таблице (date, amount) есть две записи:20160101, 320160105, 20Напиши без "говнокода" запрос, который выведет20160101, 320160102, null20160103, null20160104, null20160105, 20А мы плсмотрим.
>>980623Да шибко разницы нет.Один пакет на все. Внутри него под каждую сущность заведены Data Flow, выполняющие запрос из источника, сравнение с данными в DW и перенаправление на insert или update. Запросы тягают только новые данные по timestamp. В особо плохих случаях новые данные определяются сравнением колонки версии, хрень в том что у каждой записи свой номер версии (другими словами он не сквозной) из-за этого приходится тягать все данные (id и та самая колонка версии) и сравнивать с таковыми в DW. Тут и возникает некоторый оверхед. Благо что такое встречается не во всех сущностях.Через staging и batch update работает только одна сущность, наиболее критичная к перформансу и времени выполнения.Все датафлоу выполняются последовательно-параллельно. Т.е. большей частью датафлоу раскиданы так чтобы выполняться параллельно, но в случаях когда одна часть зависима от другой то такие датафлоу выстраиваются в последовательную связь.Данные вытягиваются хранимыми процедурами размещенными в оперативной базе. По одной процедуре на сущность. Вывел даже самые простецкией запросы не отличающиеся большим объемом кода - для единообразия.Вот как-то так. Возможно несколько сумбурно, но ты задай наводящие вопросы, постараюсь ответить.
>>980364Нету в исходной таблице заказов с нулевыми значениями.Представь себе такие данные для примераid, date, sum1001,2017-04-01,341002,2017-04-01,101003,2017-04-03,201004,2017-04-04,301005,2017-04-07,89И с группируй это так, что бы на выходе получить выборкуdate, sum2017-04-01,442017-04-02,null2017-04-03,202017-04-04,302017-04-05,null2017-04-06,null2017-04-07,89Как видно в исходной таблице нет данных за 2,5 и 6 число, но по задаче в конечной выборке эти числа должны присутствовать с null или 0 значением.
>>980753select 20160101, 3unionselect 20160102, nullunionselect 20160103, nullunionselect 20160104, nullunionselect 20160105, 20
>>980887Классика.жпгЕле удержался, чтобы самому так не пошутить.
Посоны, поясните за графовые базы данных.
>>980753Select *.Тебе выберет записи и с нулями
>>980803А ну элементарно, проходишься циклом по дате в диапазоне от (дата) до (дата). Если в таблице таких дат нет, то присваиваешь полю sum нулевое значение. Теперь в запосе все это опиши (мне лень). Там сложный многоуровневый запрос будет Гугл в помощь
>>980925>сложный многоуровневый запрос>проходишь цикломИ это, по-твоему не говнокод?А заджойнить 2 простые цте-шки - говнокод?У меня для тебя плохие новости
>>980925Ты траллируешь чтоли?
Посоны бдщики, поясните за ммошки, как я понял там все персонажи хранятся в бд. Статы, опыт, лвл, это всё ясно, но как хранятся предметы? Неужели там тейблы "айди игрока/айди шмотки", это же миллионы миллионов записей для того же ВоВ. Или они хранят шмотки в файлах и как-то загружают их для игроков? Хранят несколько баз данных или там и одной хватит? Я в вопросе бд почти ноль, но интересно стало. А ведь ещё есть квесты, банки, гильдейские банки. Интересно услышать что вы думаете.
>>981465Всё лежитъ въ плоскихъ таблицахъ, БД разнесены на несколько серверовъ (это называетьса "шардингъ"), хостингъ на Амазоне.
посоны, как внести изменения в таблицу из 3х стобцов если 1й стобец играет роль идентити, он же является PK, 2 столбец - рандом текст хуета, 3й столбец - FK с референсом на 1й столбец - PK.задача - изменить данные в 3м столбце, куда тыкать для результата:?
>>981506>куда тыкать для результатаАлан Бьюли, «Изучаем SQL».
>>981510это все круто конечно, но пока я докопаюсь до решения, я уже забуду его целевое предназначение
>>981513Там в первых трёх главах примеры есть.
Ну и чем монга такая плохая?
>>980918базы данных, хранящие записи в виде графа
>>981682Пояснение 10/10сам не ебу, что это, если что
>>981698что такое граф ниибешь?вощем это базы, заточенные под операции над графовыми структурами. в случае запроса "выбери мне всех пользователей, которые у меня не в друзьях и которых я не игнорю, но которые имеют со мной общие связи" реляционная базочка охуеет просто, в то время как структура гсубд позволит выполнить его без самых больших проблем
>>981789Монга тоже не сильно напряжется.
>>981792Ахха, в таком случае РСУБД с плоскими таблицами тоже не напряжотьса.
>>981805xml на диске тоже норм
>>981855Так-то да, только графы строить придется самому.
>>981855посадить стажёра выбирать вручную тоже работает
Кто мне согласен как тупому ОБЪЯСНИТЬ одну из задач с sql-ex? Я вроде понял КАК она решается, но не понимаю ПОЧЕМУ именно так. если оставите контакты, сброшу условие полностью
>>982441nomad@ag.ru
>>982441Кидай сюда, чё ты как неродной.
>>982455ОкейСхема БД состоит из четырех таблиц:Product(maker, model, type)PC(code, model, speed, ram, hd, cd, price)Laptop(code, model, speed, ram, hd, price, screen)Printer(code, model, color, type, price)Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.Задание: 14 (Serge I: 2012-04-20)Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.Вывести: maker, typeРешение типа такое:SELECT maker, min(type) AS typeFROM productGROUP BY makerHAVING COUNT(DISTINCT type) = 1AND COUNT(model) > 1Результат на пике.Я понял, что min(type) возвращает "Laptop". Но до меня не доходит как далее работает>HAVING COUNT(DISTINCT type) = 1>AND COUNT(model) > 1И почему в конечном итоге правильный результат такой, какой он есть? Как это получилось из взятия минимума по типу?Объяснение на форуме читал и не понял всё равно. У знающего человека спрашивал, вроде дошло сначала, но вот сегодня снова потерял в голове логику.
>>982457Ну вроде ничего сложного. Для начала поменяем кое-что.SELECT maker, min(type) AS min_typeFROM productGROUP BY makerHAVING COUNT(DISTINCT type) = 1AND COUNT(model) > 1Запросы эквивалентные, просто чтобы не путаться.Если бы у нас не было HAVING, то мы бы просто получили всех производителей и ещё какой-то тип.HAVING - это тоже самое, что и where, только ещё с агрегирующими функциями умеет работать (после WHERE отрабатывает).COUNT(DISTINCT type) - количество типов аппаратуры. Т.к у нас группировка по производителю, то количество типов аппаратуры, которыми занимается производитель.COUNT(DISTINCT type) = 1 - производители с единственным типом производимой аппаратурыCOUNT(model) - количество моделей аппаратуры. Т.к у нас группировка по производителю, то количество моделей аппаратуры, которые создаёт производитель.COUNT(model) > 1 - производители, с количеством производимых моделей больше одной.min(type) - это просто финт ушами, чтобы вывести тип. Иначе ругалось бы, что мы не группировали по type, а нам это и не надо. Т.к. тип аппаратуры у итоговых производителей только один, то всё равно min(type) = type.
>>982478А, ну вот, теперь понял! Спасибо. Меня и путало именно то, что ты поменял, так как я думал, что в дальнейшем используется именно значение минимум/максимум из type, которому и присвоили имя этого столбца, а не оригинальный столбец. Короче, придумал себе, что это что-то вроде переменной и не понимал как из неё выходит решение. А оказалось, что это просто не особо нужная штука, внедрённая лишь чтобы избежать ошибки при выполнении.
Аноны, я застрял со своим затупом:Задача 18 DML с sql-ex: Перенести все концевые пробелы, имеющиеся в названии каждого сражения в таблице Battles, в начало названия.Вот запрос:update battlesset name = ' '+namewhere right(substring(name, 1, len(name)+1),1) = ' 'Пишет, что 33 несовпадения на базе проверочной.Первый затуп за все время и на такой казалось бы простой задаче. В чем подвох?
>>982769Ты же не переносишь ничего.
>>982775Я видимо дурак и неправильно понимаю поставленную задачу.
>>982780У тебя есть строка, которая начинается с 3 пробелов и заканчивается 10 пробелами. После преобразования строка должна начинаться с 13 пробелов, пробелы в конце должны исчезнуть.
>>982791Спасибо, я конечно очень затупил.
Каким образом разумнее хранить объекты с различными атрибутами (например, товары с набором их характеристик, которые различны для каждой категории и иногда отличаются в её пределах) в базе так, чтобы поиск по этим атрибутам не был затруднён? Есть ли нормальные альтернативы Entity-Attribute-Value для реляционных БД?
>>983564Есть конечно же.
Кто-нибудь может объяснить, почему в качестве кластерного индекса рекомендуется юзать что-то уникальное и инкрементальное, например, айдюха? По идее при вставке б-дерево будет очень часто перебилдываться.
>>983588Вставка/удаление в двоичное дерево занимает O(1) действий, с чего бы ему "часто перебилдываться".
>>983592В обычное сбалансированное двоичное дерево - да, но б-дерево - это не двоичное сбалансированное дерево в общем случае
Пол дня убил на то чтобы подружить ебаный sqlite с юникодом, шёл 17 год, база данных не умеет в lower/upper case для non Ascii, пиздец просто пиздец.
>>983682Чего там подруживать? sqlite поддерживает только юникодовские кодировки
>>983850> не умеет в lower/upper case для non AsciiТы с первого раза не прочел что-ли? Подробности тут, https://habrahabr.ru/post/57915 Закончилось тем что поправил исходники библиотеки поддерживающий юникод, скомпилировал, подружил с iorm и это гавно заработало.
>>983600несбалансированноемедленнофиксЗаодно бамп вопросу.
>>983861Тогда красава. Пуллреквест сделал?
>>983865Статья в 2009 опубликована, за эти много-много лет уже все до меня (не)сделали. Как я понял, не хотят добавлять upper/lower cases т.к. куча специфических нюансов типа письма слева-направо, возможности кодировать один символ разными способами, и т.д. В это все углубляться не стал, так как нужен был исключительно русский язык. Под самый конец (как и полагается) даже нашел статью о примерном решении к которому сам пришел, вобщем все как обычно.
Добро пожаловать в phpMyAdminЧто с ним со мной не так?
>>983682Зато весит 600 кбайт, в отличии от скл-сервера, например, который несколько гигов занимает.
>>984567функционал у него соответствующий, на 600кб
>>973923 (OP)сап двач.сижу в шараге 4 пары практики по БД!!!! Нужна помощь с запросом. нада вычеслить разность количества товаров из двух таблиц: ПОСТУПЛЕНИЕ и ПРОДАЖИ(есть еще таблица ТОВАРЫ но похуй). То есть сгруппировать товары в обеих таблицах по коду товара и sum(Postuplenie.Kolvo)-sum(Prodaji.Kolvo). ВОТ таблицы:ПродажиНомер________int PKКод товара____int FKДата__________dateКоличество____intЦена__________moneyПоступленияНомер________int PKКод товара____int FKДата__________dateКоличество____intЦена__________moneyВот мои наработки:SELECT sum(hui1)-sum(hui2)FROM( SELECT Номер, Название, Дата , Количество AS hui1, Цена, КоличествоЦена AS Стоимость FROM Товары, Поступления WHERE (Код = [Код товара]) UNION SELECT Номер, Название, Дата , Количество AS hui2, Цена, КоличествоЦена AS Стоимость FROM Товары, Продажи WHERE (Код = [Код товара]) )GROUP BY Номер
>>984604SELECT t.Номер, SUM(Количество * Направление)FROM( SELECT Номер, Название, Дата , Количество, Цена, КоличествоЦена AS Стоимость, 1 as Направление FROM Товары, Поступления WHERE (Код = [Код товара]) UNION SELECT Номер, Название, Дата , Количество, Цена, КоличествоЦена AS Стоимость, -1 as Направление FROM Товары, Продажи WHERE (Код = [Код товара])) tGROUP BY Номер
Решил продолжить оттачивать свой sql-скилл через sql-ex. Мне, как лишь иногда макросописцу на VBA, очень трудно дается абсолютно новая сфера.Решил влететь на рейтинг и с первой задачи охуел:Дима и Миша пользуются продуктами от одного и того же производителя.Тип Таниного принтера не такой, как у Вити, но признак "цветной или нет" - совпадает.Размер экрана Диминого ноутбука на 3 дюйма больше Олиного.Мишин ПК в 4 раза дороже Таниного принтера.Номера моделей Витиного принтера и Олиного ноутбука отличаются только третьим символом.У Костиного ПК скорость процессора, как у Мишиного ПК; объем жесткого диска, как у Диминого ноутбука; объем памяти, как у Олиного ноутбука, а цена - как у Витиного принтера.Вывести все возможные номера моделей Костиного ПК.Ладно, пара часов и всё свел, получил правильное решение на общей базе, но на проверочной встрял.Походу встрял на пункте, где надо вытащить модели с общим 3 символом.Итак, вот мой подход:>Выбираем все модели с количеством символом от 4, где можно применить правило "первые два символа и все после третьего должны совпадать"with baze as(Select model, left(model, 2)+right(model, len(model)-3) num3 from printerwhere len(model) > 3union select model, left(model, 2)+right(model, len(model)-3) num3 from laptopWhere len(model) > 3)select model from (select num3, count(num3) ct from bazegroup by num3) ac left join baze on ac.num3=baze.num3where ct > 1>Дальше объединим с "все модели с <4 символов, у которых должны совпадать только первые два". Тоже самое, только чуть иначе:with baze as(Select model, left(model, 2) num3 from printerwhere len(model) < 4union select model, left(model, 2) num3 from laptopWhere len(model) < 4)select model from (select num3, count(num3) ct from bazegroup by num3) ac left join baze on ac.num3=baze.num3where ct > 1Ну и далее я при определении ноута Димы буду просто ссылаться на полученную таблицу с моделями.Все равно не могу дополучить 2 значений на проверочной базе. Где я дурак?
>>985687А если предположить, что 3 символ должен быть?
>>985687Во втором запросе ещё не хватает проверки, что обе модели длины 3 или что одна модель длины 3, а вторая длины 2.
>>985687И ещё эти запросы не смотрят вообще на 3 символ. Он же должен отличаться.
Реквестирую вводную книгу по SQl. А то знакомый-студент попросил решить пару заданий, а я даже после беглого гуглинга понял, что нихуя не понял этот ваш SQL.
>>985951У нас в универе были базы, но вдуплил во всё это дело только на работе. Так что какой-то книги, чтобы взять и понять, не посоветую.
>>985951Любая книга подойдет, если ты совсем по нулям. Я выучил sql как начал с ним работать. Не скажу что дохуя эксперт, но для решения большинства задач знаний хватает. Пока читаешь про сферический left join в вакууме в памяти откладывается все это плохо. Нужна постояная практика.
>>985951Хороший гайд: https://github.com/codedokode/pasta/blob/master/db/databases.mdСам его прошёл, как раз в конце есть 4 интересные задачи.
>>986027Полностью двачую, аналогичная хуйня. В универе были курсы по бд и хранилищам, все проебланил, как мудак. Думал, что хуйня, все казалось скучным и неинтересным.А на работе а к а стажировке проникся прям, тепеь жить не могу без двх, кубов скл и мдх. (И соответствующей приятной зп, конечно.)
Не пойму чего хотят и как это получить.Желательно подскажите с помощью чего решить (не решать за меня), хочется нубские навыки развить.
>>987659Хотят, чтобы ты табличку с подразделениями заджойнил на себя 4 раза и вытащил в оезультат запроса коды и наименования "родительских" подразделений.Проиграл с термина >историзацияПринято говорить историчность простдля про-левела можно вместо 4 джойнов заебашить рекурсию, но, если ты не понял суть задания, то про рекурсию, скорее всего, не слышал
>>987700> заджойнил на себя 4 разанихуя стопэ. еси уж говнокодить, так с пивотом, а не вот это вот вы
>>985740То есть должны попадать только те, что длины 2 и совпадают по этим двум символам, а например ххх и хх не должны считаться как совпадающие?В таком случае опять ошибка:With bazex as (select l.model lapmod, pr.model prmod from (select model from laptop where len(model) >3) as l, (select model from printer where len(model) >3) as prwhere substring(l.model,4,len(l.model)-3)=substring(pr.model,4,len(pr.model)-3) and substring(l.model,1,2)=substring(pr.model,1,2) and substring(l.model,3,1)<>substring(pr.model,3,1)unionselect l.model lapmod, pr.model prmod from (select model from laptop where len(model) =3) as l, (select model from printer where len(model) = 3) as prwhere substring(l.model,1,2)=substring(pr.model,1,2) and substring(l.model,3,1)<>substring(pr.model,3,1)Unionselect l.model lapmod, pr.model prmod from (select model from laptop where len(model) =2) as l, (select model from printer where len(model) = 2) as prwhere substring(l.model,1,2)=substring(pr.model,1,2) and substring(l.model,3,1)<>substring(pr.model,3,1)),OLap as (Select p.model, l.screen screen,ram from product p left join laptop l on p.model = l.model where p.model in (select lapmod from bazex union select prmod from bazex) and p.type = 'Laptop'),VityaP as(Select p.model, printer.type, color, price from product p left join printer on p.model = printer.modelwhere p.model in (select lapmod from bazex union select prmod from bazex) and p.type = 'printer'),TanyaP as(Select model, type, color, price from printerwhere type not in (select type from VityaP) and color in (select color from VityaP)),MishPC as(Select p.maker, PC.model, PC.price, speed from PC left join product p on p.model = pc.modelWhere PC.Price in (Select price*4 from TanyaP)),DimLap as (Select maker, l.model, hd from laptop l left join product p on l.model = p.modelwhere screen in (select screen+3 from OLap) and l.model not in (select model from OLap) and maker in (select maker from MishPC))Select model from PCWhere speed in (select speed from mishPC) and hd in (select hd from dimlap) and ram in (select ram from OLap) and price in (Select price from VityaP)
Не знаю связанно или не связано с тематикой данного треда,сам нуль поэтому и спрашиваю тут: Есть короче друпал у него есть бд, я через phpmyadmin в друпальскую БД добавил свою колонку допустим с Id и Nameкак мне их вывести на странице?Скиньте либо тутор какой нибудь, либо наставьте по пацански, можете даже обосать, только не бейте.Алсо если друпал говно предложите альтернативу. По сути мне нужно только выводить информацию с бд на странице. Спасибо.
>>987775>Алсо если друпал говно предложите альтернативу.Ви таки будете смеялъсо, но — чистый похапэ.
>>987769Наоборот: две модели с длиной 2 не подходят под данное условие по определению. То, что ты пытался отсеять, допустимо, если это допустил автор задачи.
>>987784Значит только те, что имеют 3 символа и более?А модели xxx и xx тоже отсеиваются, так как у них не отличается третий символ за неимением.
>>987805Ну вот про последний случай я и говорил, что тут не понятно. Отсутствие и наличие символа может считаться различием.Учитывая, что тебе нужно сам третий символ сравнивать. В теории модели принтеров и ПК могут совпадать
>>987815Ну а зачем сравнивать с 2 символами, если можно ограничиться только двумя выборками - с 3 символами и с более 3х?А для третьего символа я добавил substring(l.model,3,1)<>substring(pr.model,3,1)
>>987702У тебя написано, что максимальный уровень вложенности 4. Считаешь, что 4 джойна - это говнокод, вперед, развлекайся с пивотами.
>>987948Пивот - пкремещение?100.500.100 - это какой тип данных?
Пацаны, если я хочу учить SQL по книге. То год выпуска книги не имеет большого значения?
>>987948да я вообще эту хуйню городить не буду. ни с пивотами, ни без, лел
>>988689если книга разгоняет за сыкуль соответствующий какому-то актуальному стандарту то да.SQL вроде консервативен дохуя так что просто не бери книги старше 20 лет лол
Есть 2 таблицы, по ним нужно сделать задания.Делаю, но никак не в дуплю.В заданиях говорится о пользовательских отчетах.Что значит пользовательский отчёт?Потом ещё требуют сделать с параметрами для выбора пользователя.Как их делать то?
>>988874
>>988874>22мб
>>988883Ты бы лучше по теме сказал, в Эксель это выпадающий список. А тут что?Я нуб совсем.
>>988904Не скажу я ничего, интернет не позволяет.
>>988661Я твой вопрос вообще не понял, если честно.
>>988874Пользовательский отчет - это результатов запроса куда-угодно: в Excel, Reporting и т.п.Суть в том, чтобы этот отчет имел возможность обновляться и отображать всегда актуальные данные.в Excel это делается через "Данные"-"Подключения", куда ты должен запилить процедуру или вьюху.
>>988904Ты не просто нуб, ты еще и долбоеб.У тебя на картинке тектса меньше чем на килоайт. Но ты, блядь, запихнул его в картинку на 22 мегабайта. Качать 22 метра так себе удовольствие. Если не можешь описать задачу нормально, то сиди и страдай. Тебе никто ничего не обязан.
>>989054Извините, с айфона фоткал
Что за хуесосы придумали ms sql, почему нельзя просто перенести базу данных с одного компьютера на другой?
>>989379BACKUP/RESTORE DATABASE))))
>>989379что за хуесос придумал тебя? просто кек
>>989379Там же несколько способов: бэкап/рестор, детач/аттач, копирование в двух режимах. Чего не хватает?
>>973997std::string обертка над charЗВЕЗДАЗВЕЗДАchar[] тоже самое, что и charЗВЕЗДАЗВЕЗДА, просто по другому написанное
>>973923 (OP)>выбираем лудшую СУБДПеречислил говно, а Firebirda и нет.
>>990892>ЗВЕЗДАЗВЕЗДАпросто ЗВЕЗДАфикс
>>990892Если тоже самое значит может работать приведение типов, как между char и byte... ох вэйь оно не рботает, а ты долбоеб просто не понимаешь о чем пишешь. Кокая печалька.
>>990893Каковы преимущества файрбёрда перед перечисленными СУБД?
>>973923 (OP)FOXPRO ЗАБЫЛИ
Leto DB Server - ПРОДВИГАЛ NOSQL ДО ТОГО КАК ЭТО СТАЛО МОДНА
XBASE РАБОТАЕТ ДАЖЕ НА 8И БИТНЫХ КОМПЬЮТЕРАХ!
>>990893>эксель гугл спред щитс>перечислил говноWait...Нужно, чтобы ты убедил нас в преимуществе своего говна над экселем, тогда, так и быть, включим его в следующий тред.
Это нормально что ILIKE раза в три медленнее LIKE в постгресе? Как юзать LIKE без зависимости от регистра?
>>993227>RDB>LIKEСам поймёшь где обосрался?
>>993232MONGOEB ETO TI?
>>993227UPPER(t.field) like UPPER(filter)
Есть таблица в Sqlite как на пике. Колонки А и В содержат условные числа, в С - произведение А и В. Некоторые ячейки в колонке С не заполнены должным образом. Как это сделать?
>>994781Как сделать что?
>>994802Это
>>994802Записать результат произведения А и В в С, стоящих в одном ряду, если С - пуста.
>>994820update tableset c = a * bwhere c is null
>>994829>>994820Лол, там уже запрос на русском был написан, нужно было просто перевести на скл.
>SELECT `name` FROM `items` ORDER BY `name`>Item - Stage 10>Item - Stage 11>Item - Stage 6>Item - Stage 7Ору с этой парашной сортировки в 2к17. Пиздец, стыдоба, просто пиздец.Существует НОРМАЛЬНЫЙ способ (т.е. максимум в одну строку) правильно отсортировать имена? Чтобы стало вот так:>Item - Stage 6>Item - Stage 7>Item - Stage 10>Item - Stage 11
>>995354Опиши критерий, по которому ты хочешь сортировать?В твоей табличке в поле name есть только записи в стиле>Item - Stage X?На каком месте, напрмер, должна находиться запись>Item - Stage 1x1?В общем, напиши нормально постановку задачи.Mysql сортирует твоим имеа, как строки, в которых 11, очевидно, идет перед 2.
>>995398Мне нужна натуральная сортировка (Natural Sort https://en.wikipedia.org/wiki/Natural_sort_order), где результат будет такой:...>ItemOne - Stage 6>ItemOne - Stage 7>ItemOne - Stage 10>ItemOne - Stage 11>ItemTwo - Stage 6>ItemTwo - Stage 7>ItemTwo - Stage 10>ItemTwo - Stage 11...В пхп есть функция natsort http://php.net/manual/en/function.natsort.php однако я спрашиваю про такую же функцию в mysql. Других колонок для сортировки в таблице нет, есть только рандомные айдишники.
>>995408А в гугле тебя забанили, чудило?
>>995408https://stackoverflow.com/questions/153633/natural-sort-in-mysql
>>995419Перед тем, как задать вопрос, я все проверил и те костыли не рабоают на моем примере.>>995425Разберем по частям написанное:>A solution could be to create another columnДля того, чтобы создать колонку с сортировочным ключом нужно изначально отсортировать правильно и/или написать сортировочную функцию. Перечитай мой первый пост, там сказано "НОРМАЛЬНЫЙ способ (т.е. максимум в одну строку)".>SELECT alphanumeric, integer FROM sorting_test ORDER BY LENGTH(alphanumeric), alphanumericОбосрётся как только изменится размер строки с "ItemTwo - Stage 11" на "ItemThree - Stage 11".>SELECT names FROM your_table ORDER BY games + 0 ASCРаботает только на числовых строках.>несколько ответов, где предлагают создать функцию на сотню строчекТут всё ясно.>CAST(mid(name, 6, LENGTH(c) -5)Не сработает на строках разной длины и структуры.>REPLACE(`table`.`column`,'Scene ','')Не сработает на строках разной длины и структуры.>Utilise the "Release Date" columnУ меня нет подобных колонок.>ответы, которые повторяются и уже давали вышеА теперь я попрошу опять. Мне нужен короткий способ натуральной сортировки МОИХ строк. Кто-нибудь может помочь?
>>995408Так и не добился от тебя ответа на вопрос, что за данные лежат в поле name.Если они все только заканчиваются каким-то числом, идущим после пробела, то отсортируй по нему:>Order by right(name, instr(reverse(name), ' ')-1), name
>>995433Рандомное имя>ItemOne - Stage 6>ItemOne - Stage 7>ItemOne - Stage 10>ItemOne - Stage 11>ItemTwo - Stage 6>ItemTwo - Stage 11>ItemThree - Stage 11>ItemFour>ItemFive - Stage 1>ItemFive - Stage 2
>>995433Вот я даже полез и заскринил.
>>995434Ответь на вопрос, в каком порядке должны возвращаться следующие строки в результате твоей сортировки?>name1>nam1e>name01> 1>name>2nameПотому что пока не очень понятно, что ты хочешь получить.В доке пхе слишком простой пример описан.
>>995437>Мне нужен короткий способ натуральной сортировки МОИХ строк. Кто-нибудь может помочь?Я не знаю, как нужно отсортировать твои строки. Могу показать, как нужно получить на скрине на настоящией колонке с данными.
>>995440>natural sort>This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations>human being>я не знаю, как отсортировать твои строкиО чем разговор тогда?Числа могут встречаться только в конце твоих слов или где угодно?
>>995443По твоим строкам не очевидно, как их нужно сортировать. В моем же случае полностью очевидно - по названиям и по стейджу. Или ты хочешь сказать, что человек при сортировке моих данных поставил бы стейдж 12 выше стейджа 7 имея "Baleful Staff - Stage 12" и "Baleful Staff - Stage 7"? Нет, поставил бы правильно, т.е. как >human beingЧисла только в конце.
Если только в конце, то сортируем по1. Имени, обрубленному до первому встречному числу, если оно есть, 2. По числу, если оно есть.Order by Case when right(name, instr(reverse(name), ' ')-1)+1=right(name, instr(reverse(name), ' ')-1)Then Left(name, len(name)-instr(reverse(name), ' ')-1)Else nameEnd, Case when right(name, instr(reverse(name), ' ')-1)+1=right(name, instr(reverse(name), ' ')-1)Then Cast(right(name, instr(reverse(name), ' ')-1) as int)Else 0EndК сожалению, в mysql нет нормальной проверки на то, является ли строка числом, поэтому приходится так извращаться.В одну строчку не сделаешь, думаю.
>>995451Это ответ на>>995444
>>995451Пишу с айпада, извиняюсь.Там, где написано >+1Нужно написать +0Таким образом мы и осуществим проверку на то, является ли строка числом.
>>995454Благодарю, человек хороший.
>>995456
ПомогайтеЕсть таблица, в ней поля Id, дата открытия договора , дата закрытияВсе за 2015 годДоговор открыт - считается активным. Надо вывести все активные договора в мае месяце!Договор может быть открыт 1 мая и закрыт второго. Такие тоже выводить.Второе задание. Есть те же данные, получить разбивку по месяцам и кол-во активных дней. К примеру. 1,01.01.2015,15.05.2015Должный получить 3 поляАйди, месяц, кол во активных дней. Из даты выше выйдет такое:1,январь,301,февраль,281,март, 301,апрель,311,май,15. 15 - так как договор был закрыт 15 мая, то есть активен 15 дней
>>996959УСТАНОВИ FOXPRO 2.4 DOS
>>996959>Договор может быть открыт 1 мая и закрыт второго. Такие тоже выводить.Ну то есть неактивные, а тупо все майские договора, которые были открыты и закрыты в мае.http://sqlfiddle.com/#!9/4f9d1/2/0
>>996959Select*From tbl_agreementWhere date_close > cast('20170501' as date)Как я понял, нужно вывести все договора, которые были активны в мае.
>>9969881С установи
>>996988Спасибо, ебатьЯ подвох искал. Думал через вьючу там или под запрос, Оказывается так легко все
>>996959Первое задание сделано. Теперь второе. интервал разбить на пик
>>997102Ошибочка, должны выводится все договорыВ твоём примере должен выводится договор 1,2,4,5 Так как они тоже в мае были "активны"
>>997117>>996993
Посоветуйте БД, где сама база данных размещается в одном файле, аналог Sqlite и Access. Первая не подходит потому, что только под дотнет шифруется, а вторая потому что проприетарщина. Я смотрел на H2, но так и не нагуглил, можно ли всю БД иметь в подключаемом к моей программе файле.
>>997467> H2Можно
>>997473А вообще это годный вариант? Или есть лучше?
>>997473Просто в голос. Поставил на бд логин с паролем, а в HEX редакторе все равно видно последнее действие.
Ясн, там вся бд в открытом виде.Дайте аналог sqlite с шифрованием файла, пожалуйста.
>>997485SQLCipher?
>>997486Это же не БД, это шифровалка sqlite, да еще и платная. Мне нужно что-то другое.
А не, сори. Это я даун, который не умеет читать документацию. H2 умеет в AES шифровку из коробки, и это прекрасно.
>>974094>codewars.com>Submiting your final solution...
>>997106Помогайте....(
>>997594Чем тебе помочь? Ставь конкретную задачу.Из того что ты писал выше ни слова про пик нет.
>>996988Надо из этой таблицы. >>997599Получить тот пик который я скинул.
>>997690Блять, ты заебал, напиши нормально все в одном посте:Данные,ЗадачаА то у тебя все разбросано: часть на скл фидле, часть на пикчах, все в разных постах, блять, хуево описано.
>>997843http://sqlfiddle.com/#!9/4f9d1/2/0Айди договора, дата открытия, дата закрытия.Договор 1,01.01.2015,05.05.2015Посчитать кол-во активных дней,т.е.Построить отчёт следующего вида:Договор 1,январь,30днейДоговор 1,февраль 28 дней..Договор 1, май,5 днейПриложил пик для наглядности
>>997857Один я ничего не понял?
>>997903Вот пик что надо получить, блядь
>>997922Есть данные Договор, открыт 1 января, закрыт 15 марта.Посчитай кол-во активных дней по месяцам.
>>997857Количество активных дней считается через разницу между датой начала договора и сегодняшним днем или датой закрытия?Какая у тебя СУБД? В разных субд даты вычитаются разными функциями.
>>997930MySQLФункцией dateiff мы получим 70 с хуем. дней, то есть январь февраль и 15 дней марта Мне же надо посчитать в каждом месяце сколько дней "активных". Я скинул пик даже, что непонятного?
>>997935В том то и дело, что нихуя не понятно. Пример дай нормальный.
>>997935А, я понял. Ну ничего очевидного в голову не приходит.
>>997963Подсказали, таблицу с датами сделать и к ней джойнить ;)
>>997965А это вообще законно? Обычно явно пишут какие таблицы есть и какие можно использовать.А тут не особо ясно что ты к чему джоинить собрался. Годы? Месяцы? Дни?
>>997986 Месяцы, а потом исходя из этого вывести кол во дней. Хз
>>998012Вот есть у тебя дата открытия 1 января 2015 и дата закрытия 1 января 2017. Если джоинить по таблице с месяцами, то джин даст ровно одну строку.И в чем смысл?
>>997935>>997965>>997986>>998013U N I O N A L LNIONALL
Допустим есть таблица с большим количеством записей. Что эффективней:- делать запрос в такую таблицу- или разбить таблицу на несколько (таблица1, таблица2...) и делать запросы в них, а результат объединять?
>>980239Redis
>>998378А сам-то как думаешь? Какие данные? Какой запрос?
>>998378Эффективнее будет их проиндексировать. Разбиение нарушит целостность данных.
>>998448базачую.
>>976033датагрип божественный, хотя денег стоит
>>978107постгрес это хайп, хомяки все на него побежали. вопреки кукареканию EDB и Бартунова до оракла и MSSQL ему пока еще слишком далеко, т.е. совсем, лет так 10-15 не меньше (представь куда уйдет оракл за это время), а многих вещей у него вообще никогда не будет. в сравнении с MySQL он до сих пор проигрывает по репликации, по сложности обслуживания (это кажется мол чего там, а потом всех заебывает), по скорости. у постгреса 55 сторонних левых решений по репликации, встроенное начало шевеличться только сейчас, на фоне MySQL это позор. ну когда там появится нормальный отлаженный отшлифованный мульти-мастер? что до модных хипстерских фишечек постгреса: даже консервативные mssql и оракл не отстают, в оракле уже есть Json. mysql тоже не отстает и там тоже есть json теперь, по поддержке SQL mysql уже подтянулся и реализовал и оконные функции, рекурсию в цте и вроде даже кубы. mysql вообще очень сильно вырос за последние 10 лет, я его вообще как качественно иной продукт воспринимаю. всякие прикольные экстеншены и хуйнюшки постгреса в массовой практике никто не использует, не воспринимает и не даст тебе этого сделать, тебя просто коллеги-программисты не поймут. полнотекст у него хороший но он хуже и всяких люсен и даже вшивого сфинкса. выбирает-то он быстро но выборка без ранка пользы не несет никакой, они сами это понимают и пишут и говорят, приставные костыли в виде рум начали появляться только сейчас, это при том, что люсенам и сфинксам уже хз сколько лет и там всё давно отлажено. проблемы постгреса с валлогами и переполнением транзакций - они вообще не будут никогда решены, это просто его особенность. ну а что у него есть особо? дмл транзакционный? это мелочь на самом деле незначительная. постгис - но это отдельный проект, и к БД отношения не имеет, ДБА на этом ЗП не увеличит, программист тоже, это нишевая вещь очень (постгис), это надо идти тогда в ГИС куда-то но там надо много чего другого. т.е. постгес это такая красивая идеальная картинка, всё прикольно, модно, правильно, но на практике всё разбивается о реальность: всё это свистелки мелочные, а постгресу реально нет места особенно-то.
>>998378все ответы неправильные. таблицу с "большим кол-вом" данных нужно оставить как есть. базы данных на то и придуманы.если запрос тормозит, значит проблема в чем-то другом (может быть в запросе?)
>>999233Ну расскажи нам как правильно написать select * from из таблицы с миллиардом записей
>>999243тебе в приложении нужен весь миллиард?если нет, то выбирай то, что приложению/аналитику нужно. where параграф-то тебе на что?
>>999251>>тебе в приложении нужен весь миллиард?Да. Мне нужен весь миллиард. Иначе зачем мне база данных, если не для хранения миллиарда записей.
>>999274Дичь нам не втирай. Задача какая?
>>999274Ну так выбирай весь миллиад строк, смотри, читай строки. Радуйся. Проблема-то в чем?
>>999274Ну так пишешь select и выбираешь миллиард записей, в чем проблема-то?Может, у тебя машина слабовата, так надо подбирать ее сообразно задаче.
Итак, слушайте задачку не особо сложную на тему хранилищ данных:у вас есть таблица-источник в виде матрицы:В первой колонке города, откуда едет транспортКаждая следующая колонка носит название города, куда поедет транспорт. А на пересечении стоит значение:>26дн.30000где 26дн. - это время, затрачиваемое на поездку, а 30000 - стоимость перевозки.Например, >Города_____|Москва______|Спб>Псков______|15дн. 150000 | 26дн. 210000Придумайте архитектуру для расположения этих данных в вашем хранилище.%%Инб4: Хули такой формат? данные в источнике изменению не подлежат
>>999306Двачаю, смотреть на миллиард строк - нечто странное, когда человек хочет посмотреть то, сам не знает, что.Когда доходит до миллиарда строк, пора задуматься об OLAP, если честно, или писать самому агрегации и смотреть уже их. А, если вдруг появляется конкретный вопрос,>%_Юзернейм_%, почему у меня тут такое число в отчете??Тогда смотреть детализацию на конкретных срезах, априори, не весь миллиард строк.Но индексы, конечно, не помешают, хотя бы кластерный, чтоб структура хранения была упорядоченной.
>>999475Записать колонки как строки.
>>999475Наверно надо все колонки с городами сократить до одной колонки с ключом на запись с первым городом маршрута во вспомогательной.Вспомогательная таблица: ID | город | стоимость | ID следующей записи с городом или -1 если конец маршрутаНе знаю как на это будет на скл(аллах хранил от этой дрисни).Геморная таблица из-за многих селектов, например для любого расчета по цепочки городов, зато нормализованая.
>>999480>>999507А как будете хранить города? Строками?
>>997922Анон который просто сделать два задания тут.Пизлец блядь, хожу по вакансиям в дс, где уровень джуна нужен, 25-30к прошу.Собеседование проходят ничего, вроде даже руководителей приглашают, и не берут блядь.Как так то.Конкуренция или что?Вакансий 30 обошёл ща 3 месяца.Было пару мест где я обосрался, не ответив не слова.Причём писали: извините мы нашли другого и пал выбор в его пользу.Мониторю эти ваканссии, а они каждый день обновляются. Ну что за пидоры.
>>999538> Ну что за пидорыПросто ты недостаточно хорош для них. Смирись.
>>999538>25-30к прошуэто в каком городе ты такие днище копейки просишь?поражаюсь с дебилов. небось еще на оракл работать пошел, это ж заебись - писать запросы в БД стоимостью в миллионы и просить три копейки за свою работу...
>>978107Мейлру на него с оракла переехали.
Только изучаю эти ваши ЭСКВАЭЛИ. Есть пик.Нужно для каждого издательства извлечь книгу, которая была напечатана в наибольшим тиражом реди всех книг этого издательства. Издательство должно быть из Москвы. Если тираж в издательстве для данного жанра(т.е. жанр книги с максимальным тиражом) не превышает 100000 книг, то мы такой результат отсекаем.Нужно составить соотвествующий SQL запрос. Вообще я с потсгресом работаю, но впринципе похрен.Спасибо.
>>999578Я нуб чтобы выбирать между оракулом и скл.Хожу куда пригласят или на оракл или на скл.Город мой Москва.А сколько просить? Все равно не берут, прошу по минимуму, 25-30.
>>999650Вот все и думают, что ты неуверенный в себе омежка. Хорошенько вызубри все вопросы, которые могут задать, проси сразу 50к, рычи, двигай тазом.
Что означает точка в выражении FROM? НапримерSELECT p.name FROM adventure.product AS p
Есть один toad Data modeller, который я законно скачал с триал-лицензией, но вот теперь у меня проблема, триал кончился. Короче, нас только в нем учили базы рисовать, а кряк или ключ не могу найти, посоветуйте чего.
>>999706Точка означает обращение к члену структуры.p.name -> член name объекта p
>>999721Если не можешь найти кряк, то ищи триал ресет. Попробуй переустановить на виртуальной машине. Если сильно нужно, качай IDA Pro и дисассемблируй исполняемый файл.Используя реверсинжиниринг можешь написать кишен сам.
>>999734Да, так я быстрее руками напишу тогда.
>>999650>А сколько просить? Все равно не берут, прошу по минимуму, 25-30.Вот скажи, если ты будешь просить 15 000 тебя, ты думаешь, возьмут? Проси сразу 5 000 тогда - за день работу найдешь, а за 2 500 вообще сами прибегут, согласно твоей "стратегии".
>>999730Перечитай внимательно вопрос.adventure.product - вот здесь что означает точка?После FROM должно быть имя таблицы, откуда здесь точки?
>>999650если бы ты был им нужен, взяли бы на 65к безо всяких вопросов (в ДС-то). но раз ты не нужен им, то не возьмут, даже если будешь сам и доплачивать, вот поверь. деньги тут ни при чем. поднимай уровень
>>999751adventure - это название схемы, в которой лежит таблица product.Общее расположение таблиц такое:"База данных"."схема"."таблица"В ms sql дефолтная схема - dboВ postgesql - publicВ mysql схем, кажется, нет. В таком случае, adventure будет уже названием бд, это неточно, мало работал с mysqlСхемы - это как папки, в которых у тебя лежат таблички.
>>999753Как поднять то уровень?Уровень тех же запросов поднимается когда они по 30 раз в день пишутся запросы не похожие на те, который ты писал в прошлый день, сложнее. На работе есть такая возможность.А дома что? Поставил криво Sql, порешил задачки на Sql ex. И усе.Хочется реального опыта, сейчас рассматриваю аналитика, тех же продаж с написание запроса. Такое ощущение, что вместе со мной, на собеседование следом приходит гуру Sql -ик готовый пахать за 30
>>999766Как только ты осилишь оконные а к а "аналитические" функции, базарю, тебя будут брать.На всех собеседованиях почти, на которых я был (на аналитика) только это и спрашивают.ясное дело, джойны там хуейны, но это само собой разумеетсяоп-кун
>>999790http://www.sql.ru/blogs/oracleansqp/1926Оно? Может проблема в том , что я свои знания подтягиваю без участия "книг"?Щас начал читать sql для смертных - новое издание за дня 4 осилю надеюсь. А то на собеседованиях спрашивают, мол как изучаешь. А я говорю: статьи, гайды, задачки решаю. А тут ещё добавлю, что книги читаю, блчдь!
>>999811Оно. Я бы еще, все-таки, поставил себе дома субд и поигрался с открытыми данными, написал простое приложение, вытягивающее данные из БД, сделал пару отчетов на ssrs, jasper-е или powerBI, все это бесплатно, кстати говоря. И на msdn, например, куча инфы о том, как и что работает. А, если вдруг не понятно что-то, всегда есть stack overflow.
>>999827За 3 месяца без работы, можно и с голоду подохнуть и гола то идут.А так да, MySQL стоит. Вкатиться бы в etl нубом или аналитиком тех же продаж. И дома попутно углубиться.Был к слову на той неделе в одной крупной конторе на нуба скл.Собеседование прошло ничего с рук проекта.даже эйчара не было. Но к сожалению "хорошо" я думал до сегодняшнего дня, так как мне отказали
>>999811хуею с вас. натурально. сейчас столько возможностей: 1. железо нормальное недорого, 2. если надо сервер не свой, то есть виртуализация, можно арендовать сколько надо, хоть по 10 минут плати3. юниксов доведенныз до ума полно (это же пиздец): макинтош; фрибсд, линупс (бесплатная операционка, причем охуенная!)4. появились бесплатные полноценные версии крутейших оракла, микрософт-скл, дб2 даже вроде есть5. бесплатные опенсорсные реляционки: майскл, файрберд, склайт, постгрес6. инструменты опенсорсные любые вообще, мощные7. данные в интернете ПОЛНО. ПРОСТО ПОЛНО8. каналы толстые, скорость скачивания бешенные9. диски громадные и дешевые (террабайт уже вроде меньше 100 долларов сейчас)10. литературы ворованной хоть жопой жуй, я в свое время даже обложек блеать не видел11. литературы вендорской куча и хорошо сверстана в вся на сайтах12. ИНТЕРНЕТ КОПЕЙКИ СТОИТ. просто КОПЕЙКИ по сравнению с тем что былоВ Ы Е Б А Н У Т Ы ЕВ Ы Д Е Г Е Н Е Р А Т Ы
>>999857>В Ы Д Е Г Е Н Е Р А Т ЫТак никто и не отрицает, поэтому и просят советов мудрых, что ты, как первый день на дваче. Мне, например, не в падлу рассказать, что знаю, и поделиться собственным опытом, в отличии от уебков>гыгы, 150 к, попал с первого собеседования, не знаю, что вы не можете.
>>999762Ясно, спасибо. Не знал про эти схемы.
>>999790>>999811>SUM(f)>AVG (f)Агрегатные функции штоле? У меня в учебнике по SQL так называются.
>>1000015Это функции, применяемые с выражением OVER ()И классические задачи с ними, например, в tbl_sale (sale_id, manager_id, sale-date, product_id)>на каждый день вывести количество проданных продуктов с 2017-01-01>выбрать тех менеджеров, у которых было максимальное количество продаж на в предыдущем месяцеи т.п.
у меня друг работал в обосранном нии сраным инженером, сосал хуй, затем его заебала зарплата в 15 т.р., было это лет 5 назад, взял месяц отпуска, выучил pl/sql, сразу взяли в ренесанс страхование за 30 т.р.
Аноны, что можно почитать про производительность и оптимизацию БД?И какую реляционную БД посоветуете выбрать для маленького-среднего проекта?
Есть пустая бд из таблиц, нужно получить : 1 2 3 3
>>1000828> для маленького-среднего проектаSQLite или MySQL> что можно почитать про производительность и оптимизацию БД?Гугол. Укажи ему конкретную БД, т.к. оптимизации в разных БД так же могут быть разными.
>>1000828sqliteпотом перейдешь на mysql
>>1000836Помогайте!
>>1000960SELECT '1 2 3 3'
>>1000828Индексы и планы запросов.
В чем разница между PostgreSQL vs PostgreSQL Pro Standard? Что лучше юзать?
>>1001109>PostgreSQL vs PostgreSQL Pro StandardPostgreSQL - нормальная версия постгресаPostgreSQL Pro Standard - репак от Васянов
>>1001125>PostgreSQL Pro Standard - репак от ВасяновПоходу Pro это форк? Непонятно зачем Pro версию вообще пилят. Основной разработчик Pro версии Олег Бартунов является основным котрибутором в PostgreSQL.
>>1001136>Непонятно зачем Pro версию вообще пилятЧтоб срубить бабла на поддержке, очевидно же. Стандартная схема с опен сорс софтом.
>>1001141>Чтоб срубить бабла на поддержке, очевидно же. Стандартная схема с опен сорс софтом.Ясно. Импортозамещение значит ( ° ʖ °).Чуть было не установил.
Аноны, нид хелп. Второе задание там и там, я не шарю совсем.
INSERT INTO CELLAR (BIN#, WINE, PRODUCER, YEAR, BOTTLES, READY )f?VALUES (80, 'Syrah', 'Meridian', 1998, 12, 2003 );Что в этой строке означает "f?" ? Нагуглить немного проблематично такое. Алсо пример из книги. Дейт введение в ДБ, там без привязки к конкретной реализации СУБД, вроде как чистый SQL, я делаю задания и практикуюсь на postgresql
>>1001273Тобi пiзда.
>>1001273Посмотри каким хорошим вещам тебя учат. Берись за голову пока не поздно.
>>1001283https://dev.mysql.com/doc/refman/5.7/en/insert.html>PARTITIONкусочек таблицы
>>1001462А нет, сори, партишн указывается до перечисления полей таблицы.>>1001283Тогда уточни, что за субд и где именно ты видел такой синтаксис.
>>1001502В рот ебал переводы.Чекнул оригинал - нету там никакого "f?"Всего одну главу прочел, уже второй косяк нахожу, первый правда был смысловой, который меня в ступор вогнал и заставил найти оригинал, а в оригинале все логично и просто было.Сук. Но с другой стороны оригинал только в качестве пикретейлед 8 издание нашел, да и вообще, 1 000 страниц на родном языке как то значительно проще было бы осилить ,чем на инглише.
>>1001512По какому гавну ты скл изучаешь? На перфокартах программировать собрался, что ли? Sql-ex интерактивный, на русском и удобный, например.
Работаю уже больше года аналитиком в банке.Пишу всякие хранимки на t-sql и pl/sql. Смотрю сейчас вакансии Разработчик/администратор ms sql. Вот думаю надо как-то выучиться, но не знаю в какую сторону копать, где нужный материал искать. Есть тут разрабы бд, которые могут подсказать?
>>1001695Ты ебанулся? Из белых людей вкатываться в дно из админов-красноглазиков-в старых свитерах?
>>1001512Любой переводной контент это почти всегда шлак.
>>1001823Ну я больше к разрабам тянусь. У них вроде зп выше, хотя и у админов бд тоже, судя по вакансиям.
>>1001823В 40 любой программистишка это делает. Потому что из альтернатив лишь бомжевание.
Аноны, помогите, есть таблица PETUHВ ней есть поля DATA_ROZHDENIYA, и поле SROK_ZHIZNI, дата рождения записана в форме даты, а срок жизни просто цифра, как сделать так, чтобы к дате рождения срок жизни добавился в виде годов?Мне надо вывести всё что data_rozhdeniya + srok_zhizhni < Сегодняшнее число! Помохите!
>>1002022DateAdd(Day, Lifetime, Birthdate)
Может кто подсказать все ли норм сделал и что можно поправить?Сверху задача, снизу то что я накорябал.
>>1002133Почему бы не объединить солиста,дирижера,композитора в таблицу people с атрибутом type,а оркестр и оркестровую группу во вторую - play_groups, тоже с атрибутом type?Меньше сущностей, как-то по-проще, всё-таки.Да и связей меньше будет.
>>1002133Что ты накорябал не отражает типов отношений сущностей. Что за связи? 1 к 1? 1 к многим? Многие к многим? Я бы зачета не поставил за такую халтуру.
>>1001695Бля. Как раз рвусь в банк.Как туда попал? Какие навыки были? Какой город и зп если не секрет. Ходил на собеседование в три банка (я только запросы лёгкие решаю 1-2 лвл на скл екс если со и об этом эйчары были предупреждены) там такие задания дали, что я смотрю - и не понимаю нихуя.Хотя в двух местах все таки дома сделал тестовое, го везде отказали.К слову зп - 90 там где нихуя не сделал.50 и 40 в других местах.А , ещё в четвёртом месте был, инет магазин, руководительница баба. Сидел с ней полтора часа решала со мной вложенный запрос , а я не догнал. И отказали потом. До сех пор ваканссию апают, видимо 30k - мало и ни кто не идёт к нимВот как вкатиться то?
>>1002426Глянул на sql-ex, говно какое-то там а не упражнения.
есть в sqlite множество строк которые начинаются одинаково как сделать запрос чтобы вернуло только строки с различным началом?
>>1002438Что ты понимаешь под различным началом? Первую букву?
>>1002447acc jiacc jebcc jiа вернет accbcc
>>1002451Ты на вопрос можешь ответить?>Что ты понимаешь под различным началом?Примера недостаточно.
>>1002425Ой все. Я блять только 1 главу прочел. И занимаюсь самостоятельно. Иначе очевидно у препода спросил бы, а не на дваче.>>1002416Короче, хер с заданием продолжу дальше изучать, ибо о том что такое атрибут таблицы еще не читал. Просто стараюсь максимально вникать в то что читаю и выполнять все задания, но выпоняю их естественно на своем уровне знаний, и конкретно - 1 глава Введения в ДБ Дейта.
>>1002426Что за задания были?Мне либо повезло, либо ещё что, но сложностей вкатиться не было. Задания были несложные, диплом не спрашивали.Банк иностранный. При этом другой банк даже отклик не просмотрел, а сразу отказал.
>>1002468>1 глава Введения в ДБ Дейта.Тогда норм всё описал, не переживай.
>>1002488Какие навыки были?
Есть один mssql сервер и одна хранимка. В хранимке запускаются еще 3 хранимки. Каждая из них запускает приложение через xp_cmdshell. Все программы делают что надо и завершаются. Но в процессеработы выводят в консоль всякие важные замечания по своей работе. Нужно как то совладать с этим выводом. Каждая программа выводит все данные как результат отдельного запроса. Нужно как то сделать что бы они все писали в одну таблицу и потом уже ее выводила главная хранимка перед завершением. Как так сделать?
>>1003095Ах да, самый очевидный вариант с созданием таблицы в бд меня не утсраивает. Хранимка может одновременно запускаться разными людьми. Так что нужно что бы все данные обрабатывались исключительно внутри нее.
>>1003095Временная таблица же.
Котаны, есть один интернет-магазин на связке PHP+MYSQL, в котором есть одна таблица с товарами (около 40к позиций) и таблица с категориями. Нужно туда добавить характеристики товаров с возможностью фильтрации по ним. Проблема в том что магазин большой, категорий и товаров дохуя, следовательно и характеристик тоже.Первое что мне пришло в голову - добавить две таблицы, одну со списком всех характеристик, вторую со связью характеристик и товаров:PROPERTIES_LIST: ID, NAME, FILTER_NAME (опционально, если в фильтре нужно какое-то кастомное название характеристики), SORT (опционально, для сортировки вывода характеристик если понадобится определенный порядок), TYPE[bool,range,value] (тип характеристики для фильтра. Да\нет, подбор по диапазону, подбор по конкретному значению)PROPERTIES_VALUES: ID, ITEM_ID, PROPERTY_ID, VALUEСамое простое - просмотр одного товара. Ищем по PROPERTIES_VALUES записи с нужным ITEM_ID и выводим названия и значения характеристик согласно SORT в PROPERTIES_LISTДалее, нам нужно для каждой категории вывести все имеющиеся в ней характеристики товаров. Т.е. когда мы заходим в какую-то категорию нам нужно пробежаться по всем товарам данной категории и собрать с них все id характеристик, удалив дубли. Потом на основе этих ID построить фильтр, учитывая тип характеристики и заполнить значения (минимальные и максимальные для диапазонов и конкретные для конкретных).Если первое я еще примерно понимаю как сделать, то со вторым вообще хз. Подскажите куда смотреть, и вообще может я изначально хуевое решение придумал и нужно совсем по другому все сделать?
>>1003117Пробывал временную таблицу, но как то нихера не выходит. Вложенные хранимки почему то ее не видят. Если кто напишет рабочий пример буду признателен.
>>1003337Глобальная временная таблица, сздается через ##Create procedure sp_test_startAsBeginIf object_id('tempdb..##tbl_temp_logs') is not null drop table ##tbl_temp_logsCreate table ##tbl_temp_logs (id int)Exec sp_test_logs_1Exec sp_test_logs_2Select id from ##tbl_temp_logsEndCreate procedure sp_test_logs_1 As BeginIf object_id('tempdb..##tbl_temp_logs') is not null Insert into ##tbl_temp_logs (id) values (1);EndCreate procedure sp_test_logs_2As BeginIf object_id('tempdb..##tbl_temp_logs') is not null Insert into ##tbl_temp_logs (id) values (2);End
>>1003347В конце sp_test_start после селекта тока дропнуть не забудь, на всякий пожарный.
>>1003347CREATE PROC dbo.p_firstASBEGIN INSERT INTO #temp VALUES (1)ENDGOCREATE PROC dbo.p_secondASBEGIN INSERT INTO #temp VALUES (2)ENDGOCREATE PROC dbo.p_somethingASBEGIN CREATE TABLE #temp ( number INT ) EXEC dbo.p_second EXEC dbo.p_first SELECT * FROM #tempENDGOEXEC dbo.p_something
>>1003361Что ты хотел этим сказать?
>>1003383Оно и с обычными временными таблицами работает.
>>973923 (OP)В БД есть таблица с регистрацией клиентов вида CustomerId, RegistrationDateTime и таблица с покупками клиентов вида CustomerId, PurchaseDatetime, ProductName.Напишите два SQL-запроса:- Запрос выводящий клиентов, которые покупали молоко, но никогда не покупали сметану.- Запрос выводящий количество клиентов, которые совершили первую покупку через 0-5 дней после регистрации
>>1003435Даже пожалуйста не сказал, уебок.Соси хуй.
>>1003435SELECT клиенты WHERE покупали молоко AND NOT покупали сметануSELECT количество клиентов WHERE первая покупка - дата регистрации <= 5
>>1003435INSERT INTO sex(tool, place, whoreId)SELECT 'anus' AS place, me.cock AS tool, whores.id AS whoreIdFROM me, whores JOIN parentsON parents.child = op.id AND parents.motherId = whores.id
>>1003361кстати, да, все процедуры в одной сессии же запускаются, так что, по всей видимости, кое-кто.. >>1003095ни хуя, на самом деле, не пробовал.
>>1003494Grant alter on sex to erohinPermission denied on table sex for user omejkin
>>973923 (OP)Посоны, я в этих ваших базах совсем нулевой. Что почитать по MS SQL, так, чтоб разжевано?
>>973923 (OP)Есть два отношения:-частные клиенты{код_клиента}-компании{код_компании}Также существуют еще два отношения:-товар-продажи {код продажи, количество, код скидки} - связанна "многие к одному" с товаромЕще существует много других отношений (скидка, журнал продаж и т. д.), но они тут не важны.Если мы соединим "продажи" с "частные клиенты" и "компании" одновременно, то смигрируют два ключа - "код_клиента" и "код-компании" и получится аномалия вставки. Я продумал только два варианта решения проблемы:1) Ввести фиктивные кортежи в отношения "частные клиенты" и "компании" и присваивать этот фиктивный домен атрибуту "код_клиента" когда мы описываем продажу для компании и, соответсвенно, наоборот.(в данном случае отношение не находится во второй нормальной форме)2) Создать два отношения "Продажи_Клиентам" и "Продажи_компаниям". Но тогда атрибуты будут одни и одни и те же, только будут зависить от разных детерминантов.Какие еще существуют решения данной проблемы?
>>1004737Две таблицы ДВА ОТНОШЕНИЯ ЛОЛ - нормальный вариант, навешиваешь над ним вьюху и не ебешь себе мозга.Еще можно просто запихнуть все в одну таблицу, добавив атрибут sale_src_id какой-нибудь, по которому однозначно можно определить, кому продали товар:1: частному клиенту2: компанииИтого у тебя получатся>cleint_id|sale_src_idв таблице с продажами, на которые ты смело можешь ебашить индекс.
>>973923 (OP)Посоны, есть одна таблица, в которой ID, имя и ID родителя (nullable). Как по имени вывести всех родителей и родителей родителей данного имени? куда копать то, джойны, рекурсивный запрос?
>>1008258два джойна
>>1008273Не, количество итераций не ограничено
>>1008258https://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx
>>1008290Уже хуй знает, но что я делаю не так? По идее для каждого должна выводиться вся иерархия, то есть для Иванова она будет выглядеть Иванов Петр Сергеевич Отдел логистики ОтделИванов Петр Сергеевич Служба логистики СлужбаИванов Петр Сергеевич Административная дирекция ДепартаментНо проходит только один раз анкор и один раз рекурсивная часть
>>1008344Картинки забыл
Как в этих ваших mssql сделать enum? Типа есть поле в таблице "статус", которое может принимать N значений. Поскольку в T-SQL не завезли enum, я вижу три варианта, но не знаю какой из них оптимален:1. добавить constraint check (status = 'firstValue' or status = 'secondValue' or ... or status = 'lastValue')\2. добавить статическую справочную таблицу, для которой в целевой таблице будет внешний ключ, и потом уже при запросе в скомпилированном view будет подставляться текст значения вместо его FK3. в БД хранить поле в виде int, а в клиентском приложении биективно отображать в задуманное значение.ИМХО 3 самый легкий и быстрый, а также позволяет хранить флаговое перечисление например, если статус имеет значение одновременно FirstValue, SecondValue и NthValue но заебистый в плане изменения значений.Второй вариант вроде ничего, но постоянные обращения к справочным таблицам это чё то фу. Первый вариант вообще не рассматриваю, но знаю о его существовании. Таки шо порекомендуете?
>>1008344>>1008345Все, разобрался вроде
>>1008354Храни интом или стрингой. С интом можно наебаться, если enum изменится. Со строкой такого не будет, но места она займет больше (возможно, не такая уж и болая проблема).
Я наконец то сделал это! После очередного собеседования с руководителем, меня все таки взяли на джуна etl процессов, дс, крупный банк.60к зп после вычета налога. Спросил меня виды джойнов, ответил и говорит: сегодня офер вышлем и выслали.Дальше бы спросил бы он - я бы не ответил. Я даже задачи с рождаемости решить не могу и не знаю об индексах ключах оптимизации и тд. Всему должны научить.Теория читал около месяца и приняли)
>>1008543Что за индексы ключей оптимизации?
>>1008556По этому поводу читни Тома Кайта, у него есть.
Как вкатиться то к вам?
>>1008596Не надо.
>>1008607Но я настаиваю.
>>1008633Настаивай.
>>1008354Третий способ классный, но только если у тебя есть хорошая актуальная документация.Вот я сейчас, например, изучал кучу таблиц, в которых используется так называемый енам, реализованный третьим способом. Спрашиваю у разрабов, что это такое, все плечами пожимают, тип кто-то делал, но уже уволился, нужно импирическим путем познавать через приложение.Первый способ тоже часто вижу в использовании, как в оп-топике: пол кладется в nvarchar(2000), а потом вопросики, а хули так медленно работает?В общем, тут, правда, ситуативно нужно применять. Хотя я, как любительно всего нормализованного, выступаю за второй, все равно, вынужден согласиться, что первый и, тем более, третий, будут гораздо быстрее работать.
>>1008659> импирическим Ты хоть строки-то экранировал, ребенок?
>>1008700от слова ИМПИРАТАР же
Есть ли какие-нибудь подводные камни при хранении булевого значения в MySQL в поле bit(1)?
Чем отличаются разные издания Кайта и какое надо читать?
И вот нахуя я вкатился в базы данных.Я же нихуя не умею.Пиздец кризис.Есть работа за сто тысяч рублей. Но я просто клепаю отчетики и ничего больше не делаю. Не etl, не архитектура, просто ссаные отчетики. Мне неинтересно.
>>1009218Тоже самое. Только мне ещё и не платят вообще.
>>1008659Подумал короче, я всё равно с C# работаю, а там через EF можно code-first подход для генерации БД использовать, и там enum просто интом хранится будет без дополнительных таблиц. Короче, 3 вариант.
>>1009218Просто отчетики - это ж аналитик тип да, по отчетности? Ну ты развиваешься не только в бд, но и в бизнесе же, потому что узнаешь, что все эти данные значат.Можно потихоньку пытаться вставать на путь управления, если не нравятся сами бд.
Выучил теорию бд наизусть и запросы сложные научился писать.Примерно около полугода потратил.Устроился без опыта в дс на 80к, аналитиком.
>>1010088Причём путь к таким деньгам я осознал только в 26, щас 27.До этого менеджером работал по продажам, знал бы я раньше и был бы умнее, в 22 сразу же этим занялся.На мой взгляд это интересно и перспективно. (Если развиваться дальше)
>>1010088Сучечка, если бы я через полгода изучения кодинга понаехал в ДС уже бы сеньором был. Всех волнует только коммерческий опыт, а не знания.
>>1010108Это Москва, это банки. Опыт от меня хотели в гавно конторах, и предлагали по 40-60к, вставал уходил Было две параллели. Ходил в гавно конторы и банки хуянки. В первом варианте хотят кучу знаний и не готовы платить. В банках уровень теорий хотят и готовы платить и растить.Вот и прокачало в банк.Причём, человек работающий до меня, свалил с 120 на 150+ в банк на Павелецкой. (По -моему в открытие)С нуля пришёл и через полтора года на 150, неплохо.Понятно почему руководитель теперь на него злой, кучу сил в него вложил.
>>1010118Круто, вышку требовали? Какие бд выучил?
>>1010120MySQL только. И до сех пор не понимаю разницы между my и оракл, так как не имел дело со вторым. Запросы везде одинаковые))Вышку для галочки, по вышке я экономист, нихуя не знающий. И по внешне не разу не программист, эйчары удивлялись, мол, программисты другие))) я довольно общительныйОбычно собеседование с эйчаром, а потом с рук, там уже гоняли по теории. В основном : виды запросов, индексы, оптимизация
Про написание триггеров и хранимок не спрашивали.
На одном собеседование попросили написать триггер на листочке, 40к они предлагали. На что ответил я руководителю в лицо: триггеры для вас будет писать человек, которому вы и платить будите как профессионалу.Он прихуел и начал кукарекать что 40к высокая зп
>>1010122>общительный>лощеный>экономист>знаний, кроме MySQL, нетА ну тогда понятно, откуда такая зп.
>>1010127Правильно ответил.
>>1010127Ну в общем-то позиция правильная. Тригеры обычно нужно писать раз в полгода-год. Если у кого-то вся логика на тригерах висит, то лучше там не работать.
>>1010131Я не понял твоего постаЧто тебе понятно то? По банкам походи и поймёшь какие цифры они дают тебе.Загляни в тот же сбертех, где каждый второй Джун имеет под сотню
>>973923 (OP)А Access кто-нить знает?
>>1010218Я джун и имею под сотню, но я программист, а не писатель запросов в бд, в отличие от тебя.
>>1009155Никакое. Доки читай.
>>973923 (OP)БЛЯТЬ АНТОН у меня горит вот что ей нужно ??что не так ?как локальный сервер создать? И да, нужно мне это для приконектенья этой бд к асп нету(пик2)
>>1010601Ты порт какой написал в коннекшне?
>>1010360Да.Что спросить то хотел?
>>1010723стандартный 3306
>>1010601я немного обосрался со средой эта утилита конектит только ms sqlНО тут тоже лажа, я хз как локальный скул сервер запустить в списке их нет(пик1)
>>1010601>>1010946ВСЕ антон ВСЕ заработало сколько ебаных нервов было потрачено...крч я просто скачал другую верчию sql сервера.
>>1011035Кек.
Слышал релизнулся 2017 мс скуэль сервер. Чего нового завезли? Стоит осваивать?
Мускулач, я решил для саморазвития написать борду. Теория баз данных рекомеедует создать сущность "пост", сущность "картинка", сущность "тред" и сущность "анон" для поддержки свободного™ общения. Соответственно, сделать связь один-ко-многим между тредом и постами. Проблема, как всегда, в запросах: во первых, нужно реализовать систему бампов со вложенными запросами - нужно получить у каждого треда дату последнего отправленного сообщения, не учитывая сообщения сверх бамплимита; во вторых, необходимо получить id только что отправленного поста, чтобы сделать запись в таблицу картинок и в таблицу связи пост-тред. Как эти запросы написать? По диагонали читал сурсы кусабы и других бордовых движков на гитхабе, и не нашел этих моментов, там просто и без задней мысли вставляется.
>>1012209>необходимо получить id только что отправленного поста, чтобы сделать запись в таблицу картинок и в таблицу связи пост-тредТранзакции нужны, дело говорю.
>>1012217Насколько я шарю, транзакции есть в оракл.
Краткое содержание предыдущих 2 постов: кокок-кукарек!
>>1012260У тебя проблемы с транзакциями?
Как прописать каскадное наследование колонки в Access?
>>1012217Кстати, сабж только частично решает проблему - без подтверждения транзакции last_inserted_id выведет предпоследний id, а это не очень хорошо, ведь свободное™ общение предполагает удаление тредов и постов
Здравствуйте, можно ли упростить этот запрос? https://pastebin.com/h7xtcaJ2Есть связь M:M между книгами и жанрами, хочу вывести список жанров, количество книг в нём, и к каждому жанру добавить последнюю добавленную книгу из этого жанра. (СУБД - MySQL или PostgreSQL). Пытался залить код на sqlfiddle вместе с дампом, но сайт отдаёт Gateway Time-out.
>>1012452Ну нашлёпал что-то. Не знаю, будет ли на мускуле работать (или вообще).https://pastebin.com/TxqHv8z5
Что читать по теории бд? Опыт потихонечку капает, скилл поднимается тоже, зарплата растет. Но теперь я хочу стать большим специалистом по базам данных, чтобы все досконально понимать. Томас Кайт или что-нибудь ещё? Работаю с бд оракл.
>>1012594Да, MySQL не поддерживает часть операторов из твоего запроса, но всё равно спасибо за код. Я понял, что простым такой запрос в любом случае быть не может. Тут ведь уместно применить денормализацию - создать отдельную таблицу для самых новых книг каждого жанра? Тогда запрос превратится в простой джойн.
>>1013099Ну можешь сделать вьюху. Даже индексированную, если прям нужно (опять же, не знаю, чё там на мускуле в этом плане).
Антоши, вот накачал я MS Management Studio, SQL Server 2012. Поставил себе на комп базу данных. Теперь хочу создать свою бд, с таблицами и хранимками. Как мне можно быстро заполнить свои таблицы хоть чем нибудь? Есть ведь в интернете уже готовые заполненные таблицы с данными, чтоб я мог скачать и внедрить их в свою бд. Ну, там переводчики всякие, справочники.?
>>1013611Да. База стековерфлоу, например, в открытом доступе.
>>1013611А вообще, для начала самое то будут майкрософтовские учебные базы: адвенчеворкс, северный ветер. Есть и олтп и дв версии под разные сиквелы.https://msftdbprodsamples.codeplex.com/
>>1012917Каков стаж, где работаешь, какая зп?мимо-оракл-дб
Привет, анон, помоги придумать оптимальное решение:Есть таблицы А и В.Нужно выбрать все такие A.pk_id, для которыхсуществует хотя бы один ряд A.pk_id = B.fk_id,но при этом для всех таких рядов B должно выполняться условие B.x is not nullПока на ум приходит только использование exists и not existsselect A.pk_idfrom Awhere exists(select 1 from B where B.fk_id = A.pk_id)and not exists(select 1 from B where B.fk_id = A.pk_id and B.x is null)Не нравится, что два раза приходится сканить B, хоть колонки и индексированы. Как можно сделать проще?
>>1014089Билли, про JOIN слышал что-нибудь?
>>1014106Не совсем уловил твою мысль.Нужно убедиться, что в таблице B для всех B.fk_id = A.pk_id выполняется B.x is not null.Допустим получили следующее:select A.pk_id, B.xfrom A left join B on A.pk_id = B.pk_idТеперь надо как-то схлопнуть результат, чтобыостались только те уникальные A.pk_id, у которых B.xне null?
>>1010164Поясни, плс, а если все висит на instead of триггерах, но они просто промежуточное звено между клиентом и логикой в хранимках?
>>1014167Триггеры полезны, но нужно использовать очень аккуратно.Они скрывают часть логики. Никогда не знаешь, когда какой триггер "триггернётся". Попаболь может быть дикой от таких моментов.Ну и они включаются на каждый чих, а не тогда, когда тебе надо и не тогда, когда тебе кажется они должны включаться/не включаться. Замедляют базу.>>1014161Да, неправильно понял твоё задание. Можно через join решить, ну ты сам смотри.Насчёт того, что там у тебя 2 скана, я подозреваю, что планировщик всё равно чётко сделает. Посмотри план выполнения.select A.pk_idfrom A inner join B on A.pk_id = B.fk_idgroup by A.pk_idhaving count(*) - count(B.x) = 0
Сап, други.Посоветуйте годный мануал по Teradata для нубов.В основном нужны ETL, отчеты, BI.Админка вроде пока не требуется.
Вчера на собеседовании спросили по sql, и я обосралсяЕсть таблица-------------------------date | status | item_id-------------------------1.05 | 'ok' | 1231.05 | 'cancel' | 1242.05 | 'ok' | 1253.05 | 'ok' | 1263.05 | 'ok' | 1273.05 | 'cancel' | 128Нужно написать запрос, который вернет результатСтатус | Кол-во записей c этим статусом 1.05 | Кол-во записей с этим статусом 2.05 | ~ 3.05То есть результат должен быть'ok' | 1 | 1 | 2'cancel' | 1 | 0 | 1Пробовал группировать по статусу where date = N, потом джойнить полученные таблицы, получилась хуитта.А главное, если кол-во дат неизвестно заранее, как сделать стоблик для каждой?(И шапку еще юнионом присобачить штоле)p.s. Нет ли сборника таких задач, потренироваться?
>>1014311Это пиздэц, тебе не повезло. Гугли PIVOT.
>>975255продажа_кончи
>>973923 (OP)Сиквел или ЭС КъЮ Эль?
>>1014083Привет, не самый частый гость здесь!Стаж почти два года, работаю в топ-10 банке (без подробностей, деанон), зп чуть больше сотки чистыми. Ты dba? А расскажи пожалуйста про свою работу побольше, мне это очень интересно. Сам я чистый dbd, к администрированию никакого отношения не имею, но подозреваю, что рано или поздно моя любовь к базам данных и желание углубиться в тему приведут к тому, что я стану администратором бд или архитектором.
>>973923 (OP)>Поясняем, как можно без задней мысли хранить бизнес-логику в бд, а не в приложении,Вот это пиздец. Поясните, как это говно исполняется?
>>1014889Хранимки же. Либа на настольной приложухе запускает хранимую процедуру/селект/функцию. Результат выполнения хранимки - это изменения в базе + набор селектов. Уже селекты приложение обрабатывает, отображает, если надо.Мне бы лучше кто рассказал, как белые люди логику реализуют. Ибо живу в вышеописанном мирке, света не вижу.
>>1014889Лучше не как, но зачем.
>>1014896>>1014900Я просто видел это у огромной системы, это, блядь, нечитаемо.
>>1014907Не могу сказать, потому что я не видел альтернатив. Использовать ORM какую-нибудь?Ну со стороны приложения логика на базе не выглядит сложно, самый ад начинается в самих хранимках. SQL особо не позволяет развернуться. Но со временем привыкаешь к этим бесконечным селектам, джоинам, необъяснимым условным ветвлениям и прочему дерьму.
Аноны, кроме реляционных, используете штуки типа MongoDB и им подобное? В каких случаях?
>>974196
пацаны, всю жизнь мучает меня такая задача.буду благодарен тому, кто подскажет, прям по гроб жизни.как в группировке вывести значение столбца не участвующего ни в агрегатной функции, не в группировке, но соответствующее записи, в которой значение агрегатной функции равно значению её столбцаhttp://rextester.com/NOVC13144
>>1015117Обычно все время делаю это такhttp://rextester.com/UJQR88038Но, по моему, это неправильно, страдаю из за своего быдланства
>>1015117Впили что-нибудь вроде MIN, MAX, FIRST_VALUE и т.д. Тебе ведь всё равно, какое значение будет.
>>1015126не все равно, а соответствующее записи
>>980263>>980266http://rextester.com/DQHUZ6497как то так
>>1015130А, ну тогда можно использовать rank over, где rn=1; first_value over с сортировкой по max_value; having max over = max_value.
Аноны, помогите написать триггер, который будет подсчитывать сумму полей А и В в таблице 1 и вносить эти данные в таблицу 2.
Поясните за ado.net + linq убергоднота же вроде.
>>1015164Зачем, вообще, хранить суммы?Create trigger tr_lul on tbl_one after insert, updateAsMerge tbl_2 as tUsing (select lul_id, a+b as c) as sOn s.lul_id=t.lul_idWhen matched then update Set t.c=s.cWhen not matched then insert (c)Values (s.c)
>>1015279>set c = s.cSamofix
>>1015279Create trigger tr_lul on tbl_one after insert, updateAsMerge tbl_2 as tUsing (select lul_id, a+b as c from inserted) as sOn lul_id=s.lul_idWhen matched then update Set t.c=s.cWhen not matched then insert (c)Values (s.c)Вот, в общем, правильно
>>973923 (OP)nvl(sum(case when ... then emp_fact_value else d.d.emp_fact_value end) over (partition by...)Это как вообще? Почему выделенное компилится и работает? Две точки? Первый раз вижу.PL/SQL
Есть три типа сотрудников: employee, manager и sales. Информация о них хранится в базе. Сотрудник employee не может иметь подчиненных, а manager и sales могут. Для каждого типа сотрудников зарплата расчитывается по-разному и зависит от числа подчиненных. Нужно разработать схему БД для того, чтобы на языке высокого уровня можно было реализовать рассчет зарплаты.Каким образом реализовать схему БД, чтобы показать иерархию сотрудников?Три разных таблицы для employee, manager и sales? Но тогда как определить, кто у кого в подчинении?Одна общая таблица employee, в которой есть референсы к таблице должностей и поле superior, которое может быть NULL и в котором указывается id начальника?Как-то еще?
>>1015398Опять выходишь на связь, мудило?>к таблице должностейЗачем она тебе? Что там хранится?Не вижу, пока, никакой проблемы в одной таблице employee с полем type, определяющим тип сотрудника. Чтоб нельзя было добавить обычному сотруднику подчиненных, сделаешь какой-нибудь constraint или триггер.Тут, конечно, надо смотреть на ТЗ и перспективы, а то окажется, что всё совсем не так.Если это bazi_dannih_laba4, то не еби мозги и делай как угодно.
>>1015411>Зачем она тебе? Что там хранится?Там хранится id должности и ее название. Это пригодится, например, для отображения должности в гуе.
>>1015416Решается if-else или enum-ом в коде, а сущностью в БД. Опять же зависит от того, что за требования к системе. Если в системе сами пользователи могут на лету заводить новые типы сотрудников, задавать им какие-то свойства и т.п., без дополнительных таблиц никуда. Если у тебя всегда 3 типа сотрудников, то разруливай всё прямо в коде и не усложняй систему.
>>1015157http://rextester.com/UJQR88038Добра тебе, достойный человек, подсказал как делать.Ну я и накалябал, кому интересно, результат запилил.
>>1015450Извиняюсь, ссылка не таhttp://rextester.com/UXGO19107
>>1015390> Это как вообще? Почему выделенное компилится и работает? Две точки? Первый раз вижу.d. - название бдВторое d. - название схемы, в которой находится таблица emp_fact_value
>>1015530sum([название таблицы]) ?Не, там фишка в том, что d это сокращённое название для таблицы, из которой происходит селект.emp_fact_value - это поле.Если упростить, выглядит это как >select d.d.emp_fact value from d_table dОднако если писать такую хуету не в коде хранимки, а в обычном селекте, получается ошибка.
>>1015535Подчеркивание забыл, ну вы поняли.
>>1015536Поменяй алиас на другое что-то. Будет работать?
>>1015602На бою компилить не буду, чтобы не наебнуть, а тест не обновлялся тыщу лет и там пакет не компилится по другим причинам.Скопировал отдельно запрос, запускаю.Результаты следующие.Замена первого алиаса на что угодно не ведёт к ошибке.Замена второго на что угодно ведёт к ошибке.Добавление третьего и последующего алиаса ведёт к ошибке.Если к полю из другой таблицы в этом деле селекте приписать второй алиас, валится ошибка.Такая магия, чувак.
>>1015625Фантастика.Оказалось, что приписывать второй алиас можно для таблицы, которая подсоединена через лефт джойн, а для таблицы через иннер джойн - нельзя.Попробуйте.select t.t.field_namefrom dualleft join vasha_tabla t on 1=1Работает. Меняем лефт на иннер - ошибка.Oracle 11gИ я жду пояснений.
>>1015633Причем вместо первого алиаса можно любую ебалу написать.
Перекат>>1015789 (OP)>>1015789 (OP)>>1015789 (OP)
>>1014260Спасибо за ответы, думал похоже сделать, но только через оконную функцию