|
|
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
авторНапишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например: (1,2), (4,1), (2,4), (6,3). Код: sql 1. 2. 3. 4. 5. Код: sql 1. пока варианты следующие: Код: sql 1. 2. Код: sql 1. 2. 3. 4. Код: sql 1. 2. 3. 4. 5. по здравому смыслу лидирует первый с индексом на name. вопрос - есть ли еще разумные варианты, и оптимизация этих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:06 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
Второй вариант порадовал... нафига LEAST/GREATEST? на WHERE посмотри... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:24 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
В первом варианте я бы предложил индекс на (name, id). Или убедиться, что неявное поле id может быть использовано в индексе (name). Второй вариант при оптимизации вырождается в первый. Функции LEAST и GREATEST уходят из-за WHERE g1.id < g2.id. А затем уходит и DISTINCT, т.к. дублированию записей взяться просто неоткуда. Третий вариант MySQL-специфичен, поэтому не думаю, что стоит рассматривать его всерьез. Или, по крайней мере, не забыть сделать явную оговорку об этом. Или модифицировать так: Код: sql 1. 2. 3. 4. 5. Но он делает больше лишней работы по сравнению с первым вариантом, т.е. выполняться будет дольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:25 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
авторВ первом варианте я бы предложил индекс на (name, id). Или убедиться, что неявное поле id может быть использовано в индексе (name). план показывает тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 15:05 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
AkinaВторой вариант порадовал... нафига LEAST/GREATEST? на WHERE посмотри... тоже хотел написать читая :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:13 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
НО главное, АВТОР, тебя поди не взяли на яндекс??? чисто за невнимательность. УСЛОВИЕ Напишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например: (1,2), (4,1), (2,4), (6,3). КАК ИЗ УСЛОВИЯ, ты решил что пара должна быть (-меньший_айди-, -больший_айди-)?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:15 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
alex564657498765453НО главное, АВТОР, тебя поди не взяли на яндекс??? чисто за невнимательность. УСЛОВИЕ Напишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например: (1,2), (4,1), (2,4), (6,3). КАК ИЗ УСЛОВИЯ, ты решил что пара должна быть (-меньший_айди-, -больший_айди-)??Как я понял, пара (1,2) считается дублем пары (2,1), иначе бы условие уникальности не имело бы смысла. Какой именно из дублей выдавать в результат никак не регламентировано, поэтому g1.id<g2.id - вполне подходящий вариант. Равно как и g1.id>g2.id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:19 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
miksoft, Если предложенный набор пар был в условии задачи - то можно считать "указано". Там сразу бросается в глаза что есть пар (4,1) ... вот с какого "перепою"? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:36 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
Arhat109miksoft, Если предложенный набор пар был в условии задачи - то можно считать "указано". Там сразу бросается в глаза что есть пар (4,1) ... вот с какого "перепою"? :)Ну так, кроме примера, больше нет никакого указания какую из пар выбирать, а его явно недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:39 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
miksoft, Дык, как пониманю, это не совсем задание, а "вольный пересказ". В любом случае, первый вариант оптимален и нафига огород городить "ещё" - непонятно, если этого не было в задании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:44 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
Arhat109miksoft, Дык, как пониманю, это не совсем задание, а "вольный пересказ". В любом случае, первый вариант оптимален и нафига огород городить "ещё" - непонятно, если этого не было в задании. авторНапишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например: (1,2), (4,1), (2,4), (6,3) При решении задачи необходимо учесть, что пары (x,y) и (y,x) — одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:18 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
miksoftВ первом варианте я бы предложил индекс на (name, id). Или убедиться, что неявное поле id может быть использовано в индексе (name). Второй вариант при оптимизации вырождается в первый. Функции LEAST и GREATEST уходят из-за WHERE g1.id < g2.id. А затем уходит и DISTINCT, т.к. дублированию записей взяться просто неоткуда. Третий вариант MySQL-специфичен, поэтому не думаю, что стоит рассматривать его всерьез. Или, по крайней мере, не забыть сделать явную оговорку об этом. Или модифицировать так: Код: sql 1. 2. 3. 4. 5. Но он делает больше лишней работы по сравнению с первым вариантом, т.е. выполняться будет дольше. ради прикола: select group_concat(id), name from tbl group by name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 06:29 |
|
||
|
Задача от yandex
|
|||
|---|---|---|---|
|
#18+
javajdbcselect group_concat(id), name from tbl group by nameУ меня была такая мысль. Но потом подумал, что результат group_concat придется нарезать на уникальные пары и додумывать ее не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 09:15 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=97&tid=1831626]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 335ms |

| 0 / 0 |
