|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверин2. Запрос составлен корректно, сколько бы дубликатов там не было. Вы как-то излишне усложнили довольно простой запрос. Код: plaintext 1. 2. 3. 4. 5.
Запрос вида Код: sql 1.
просто по определению удалит только одну строчку для каждой группы дубликатов. В моём примере будет удалена строка с id=4, и запрос придётся прогонять повторно, чтобы удалить ещё и строку с id=3. Поэтому нужно выбирать для удаления все строки, относящиеся к дубликатам, кроме какой-то одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 19:21 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
ОзверинОзверинvsl, насчет комбинаторики, я как бе не очень помню, но есть подозрение, что тут присутствует количество сочетаний без повторений, а это - n1(для варианта, когда n=m). n! Нет, n! - это перестановки, а не сочетания. Но можно даже без комбинаторики. Есть n товаров, каждый из них либо есть в магазине, либо нет => получаем двоичное число разрядностью n, что даёт 2**n значений. Минус 1, если исключать вариант «магазин без товаров». ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 19:24 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vslОзверин2. Запрос составлен корректно, сколько бы дубликатов там не было. Вы как-то излишне усложнили довольно простой запрос. Код: plaintext 1. 2. 3. 4. 5.
Запрос вида Код: sql 1.
просто по определению удалит только одну строчку для каждой группы дубликатов. В моём примере будет удалена строка с id=4, и запрос придётся прогонять повторно, чтобы удалить ещё и строку с id=3. Поэтому нужно выбирать для удаления все строки, относящиеся к дубликатам, кроме какой-то одной. кстати, да. Для таблиц с дубликатом записей более 2х - проблема ;( ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 19:37 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Добралсо до дома, написал более читаемый запрос: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 21:58 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
авторИтого для n товаров и m магазинов получаем (2**n - 1)**m. Т.е. овердофига, а вовсе не декартово произведение. Если учитывать вариант «магазин без товаров», то -1 из скобочек убираем. Я не въезжаю двойка откуда взялась? Поясните пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2019, 22:02 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Dr.HofmannавторИтого для n товаров и m магазинов получаем (2**n - 1)**m. Т.е. овердофига, а вовсе не декартово произведение. Если учитывать вариант «магазин без товаров», то -1 из скобочек убираем. Я не въезжаю двойка откуда взялась? Поясните пожалуйста. Писал дальше. vsl Есть n товаров, каждый из них либо есть в магазине, либо нет => получаем двоичное число разрядностью n, что даёт 2**n значений. Минус 1, если исключать вариант «магазин без товаров». ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 00:02 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
ОзверинДобралсо до дома, написал более читаемый запрос: «Я печатаю со скоростью 800 знаков в минуту... но такая фигня получается...» Озверин Код: sql 1. 2. 3. 4.
select id ... where id in (select min(id) ...) - внешний select бесполезен HAVING count(id)>1 OR count(id)=1 - не хватает только условия на зависание монетки в воздухе Если вам так не нравится join, то можно и без него (по крайней мере, в тексте): Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 00:10 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Примерно так Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 01:50 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vslОзверинДобралсо до дома, написал более читаемый запрос: «Я печатаю со скоростью 800 знаков в минуту... но такая фигня получается...» Озверин Код: sql 1. 2. 3. 4.
select id ... where id in (select min(id) ...) - внешний select бесполезен HAVING count(id)>1 OR count(id)=1 - не хватает только условия на зависание монетки в воздухе Если вам так не нравится join, то можно и без него (по крайней мере, в тексте): Код: sql 1. 2. 3. 4. 5.
странные у вас комментарии, просто вместо SELECT использовать DELETE - очевидно же. Мне не нравятся join`ы по текстовым полям, да еще и по нескольким. Имею право, почему нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 08:23 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vsl, а насчет minus - ну это специфичная инструкция не из стандарта SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 08:24 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверин, Пожалуйста, посмотрите на запрос на удаление дубликатов в самом первом посте темы. Он правильный. Зачем уже четвёртую страницу вы его неправильно переписываете? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 08:39 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
niteshadeОн правильный.Нет, там еще фамилия же. Вообщем в лоб (без всяких group by, аналитических функций и пр): Код: sql 1. 2. 3. 4. 5. 6. 7.
PS. кто ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 09:09 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
niteshadeОзверин, Пожалуйста, посмотрите на запрос на удаление дубликатов в самом первом посте темы. Он правильный. Зачем уже четвёртую страницу вы его неправильно переписываете? не, он неправильный. Можно по шагам разобрать: Код: sql 1.
выбрать записи с максимальным id, если эти записи имеют более 1го дупликата по полю name Код: sql 1. 2.
удалить все остальные записи. То есть те записи, которые НЕ дублируются, будут удалены, останутся только дубликаты с максимальным айди - все наоборот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 09:15 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверинvsl, а насчет minus - ну это специфичная инструкция не из стандарта SQL. Нет minus - будет except или ещё что-нибудь. Не будет ничего - значит, не повезло, возвращаемся к join'ам. Вариант с exists, который предлагался ниже, тоже не из стандарта - насколько я помню, в стандарте (по крайней мере, в 92) нельзя назначать alias таблицам у delete и update. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 09:43 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vslОзверинvsl, а насчет minus - ну это специфичная инструкция не из стандарта SQL. Нет minus - будет except или ещё что-нибудь. Не будет ничего - значит, не повезло, возвращаемся к join'ам. Вариант с exists, который предлагался ниже, тоже не из стандарта - насколько я помню, в стандарте (по крайней мере, в 92) нельзя назначать alias таблицам у delete и update. возвращайтесь к join`ам, кто ж против. Но есть варианты и без них обойтись. стандарт ныне 2008 года, но, думаю, что в 92 все это было, правда, я не понимаю, к чему вы это говорите. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 09:52 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверинvslselect id ... where id in (select min(id) ...) - внешний select бесполезен HAVING count(id)>1 OR count(id)=1 - не хватает только условия на зависание монетки в воздухе странные у вас комментарии, просто вместо SELECT использовать DELETE - очевидно же. Мне не нравятся join`ы по текстовым полям, да еще и по нескольким. Имею право, почему нет? Какое решение - такие и комментарии. В третий (или в какой, в четвёртый?) раз наступить на те же грабли, удаляя по одной строке из группы - это пустяк, главное ведь читаемость. Ох, погодите-ка, там же ещё было добавлено крайне полезное условие «A ИЛИ НЕ A». Читаемость на высоте, да. Что касается join'ов по текстовым полям - ну так модель данных такая. Если бы дубликаты определялись числовыми полями - были бы join'ы по числам :) Ладно, вот вам другое решение без join'ов: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 09:59 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vsl, так мой последний запрос - некорректен? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:05 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vsl Код: sql 1. 2. 3. 4. 5. 6.
максимально понятный запрос ;))))) ладно, хватит меня веселить, примените свои знания и злобу лучше к своей работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:07 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверинvsl, так мой последний запрос - некорректен? Конечно. Возможно, вы хотели написать там NOT IN, но не написали. Код: sql 1.
Вот так было бы нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:15 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vslОзверинvsl, так мой последний запрос - некорректен? Конечно. Возможно, вы хотели написать там NOT IN, но не написали. Код: sql 1.
Вот так было бы нормально. Я написал выбору "правильных" кодов, если вы не обратили внимание. Переделать на DELETE - как бе вопрос не сложный ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:16 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
vsl, ну и то, что вы написали - неправильно ;( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:17 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Озверинvsl, ну и то, что вы написали - неправильно ;( ну по крайней мере не то, что писал я. Хотя, можно и так, видимо ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:18 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Андрей ПанфиловniteshadeОн правильный.Нет, там еще фамилия же. Вообщем в лоб (без всяких group by, аналитических функций и пр): Я вот уверен, что на собеседовании как раз хотят проверить знает ли претендент как раз эти самый аналитические. И другие решения в зачет просто не пойдут ибо "не знает". Также как в первом вопросе - знает ли про потерю точности при сложении в "плавающей арифметике". Хотя сформулирована 1 задача в каком-то олимпиадном стиле. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 10:44 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
ПылинкаЯ вот уверен, что на собеседовании как раз хотят проверить знает ли претендент как раз эти самый аналитические.А какой смысл проверять знает кандидат аналитические функции (или хотябы о их существовании) или нет? На их изучение нужно от силы потратить неделю, так что их знание или незнание никак не добавляет и не умаляет ценности кандидата, а вот внимательность - это офигеть какой важный навык, который из за год не получить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 11:03 |
|
Вопросы на собеседовании
|
|||
---|---|---|---|
#18+
Андрей ПанфиловА какой смысл проверять знает кандидат аналитические функции (или хотябы о их существовании) или нет? На их изучение нужно от силы потратить неделю, так что их знание или незнание никак не добавляет и не умаляет ценности кандидата, а вот внимательность - это офигеть какой важный навык, который из за год не получить. А зачем тогда вообще проверять знание SQL? Его аналогично можно "изучить". Аналогично можно "за неделю изучить" множество разных вещей. Про смысл нужно спрашивать у тех кто задания задает, я лишь пытаюсь смоделировать их цели, понять какие они критерии используют при тестировании, для конкретной узкой задачи - успешно пройти их тест (выдать им ожидаемый ответ). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2019, 11:40 |
|
|
start [/forum/topic.php?fid=59&msg=39759557&tid=2121531]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 166ms |
0 / 0 |