|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
Добрый день. Прошу помочь с такой задачей: Есть таблица: ID_out ID_in Vol 1001 1004 98 1001 1005 1 1002 1005 83 1002 1005 10 Нужно вывести уникальные записи по ключу id_out и id_in, а для дублирующих строк, таких как 1002 1005 83 1002 1005 10 взять любую значение которой vol<40 если таковая имеется. Решение нужно одним запросом select Ожидаю такой результат: ID_out ID_in Vol 1001 1004 98 1001 1005 1 1002 1005 10 Заранее большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 18:23 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
Min(case Vol <40 then Vol end) + Group by ID_out, ID_in ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 18:27 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
xtender, попробовала так: Код: sql 1. 2. 3. 4. 5.
результат совсем не тот 1001 1004 null 1001 1002 null 1002 1005 10 1001 1005 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:00 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
mayapple, может условие фильтрации не сработало? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:04 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
mayapple, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:05 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
xtender, спасибо! я была близка с case, но подумала что есть какая-то секретная функция или оператор которые мне не известны и сдалась. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:11 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
mayapple xtender, спасибо! я была близка с case, но подумала что есть какая-то секретная функция или оператор которые мне не известны и сдалась. Наверное, есть. Но если это для профессора, пожалейте его старые глаза. Код: plsql 1. 2. 3.
Модератор: Предупреждение: не надо давать заведомо неправильные ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:22 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
Давайте посмотрим вместе, я тоже учусь. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Ответ правильный (это конечно еще не значит что код правильный). (1)Нужно вывести уникальные записи по ключу id_out и id_in условие выполняется (2) для дублирующих строк взять любую значение которой vol<40 выводит < 40, если такая имеется (3) Решение нужно одним запросом select условие выполняется. Вроде все в порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:59 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
НеофитSQL Вроде все в порядке. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:02 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
mayapple дублирующих строк, таких как 1002 1005 83 1002 1005 10 взять любую значение которой vol<40 если таковая имеется. Это условие можно интерпретировать иначе, чем xtender: не выбирать дубли если среди них отсутствует запись, отвечающая критерию vol<40 (вариант Саяна даст запись с незаполненным Vol) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:15 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
andrey_anonymous, Как всегда продуктивно. Тут дело в интерпретации неполного условия "для дублирующих строк взять любую значение которой vol<40". Если оно продолжается "а если нет < 40, то любую", мое решение верное Если оно продолжается "а если нет < 40, то выведи null после ID_out, ID_in", то версия xtender верная Если оно продолжается "а если нет < 40, то не выводи строку", то нужно третье решение, эти два не годятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:19 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
НеофитSQL Если оно продолжается "а если нет < 40, то любую", мое решение верное Не согласен. Ваше предположение сводится к условию "минимальное по группе, и пофиг какое" В постановке же специально оговорена граница 40. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:23 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
andrey_anonymous, А, вот и третье решение появилось пока я ответ писал. >> 1 = count(*) Мне кажется, или это долгие годы C++ наложили отпечаток? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:26 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
Вам кажется. Это отпечаток долгих лет sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:31 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
andrey_anonymous НеофитSQL Если оно продолжается "а если нет < 40, то любую", мое решение верное Не согласен. Ваше предположение сводится к условию "минимальное по группе, и пофиг какое" В постановке же специально оговорена граница 40. Я постараюсь показать тождественность*, как применимо к этой задаче, предполагая что "а если нет < 40, то любую" есть условие. решим перебором для двух чисел. числа а,б - числа меньше 40, а < б числа Д,Е - больше или равны 40, Д < Е Код: plaintext 1. 2. 3. 4. 5.
Для произвольного числа больше 2х задача тривиально сводится к двум. (*) min более строгий критерий, если быть точным. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:37 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
НеофитSQL min более строгий критерий, если быть точным. Запись с минимальным значением vol отвечает критерию "любая" так же, как и любая другая. В этой связи Ваша интерпретация просто аннулирует требование по граничному значению vol для подмножества строк с мощностью > 1, поэтому я не принял бы Ваш вариант в качестве решения несмотря на наукообразность отмазки. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 21:45 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
andrey_anonymous, Я еще подумал, но все таки не согласен. Граничное условие задано, согласен. Я заменил это граничное условие более строгим, которое не упоминает 40, но выполняет условие. Что может быт не интуитивно, потому что число 40 вроде как пропало, а оно казалось важным. Я попробую по-другому. "Маша, дай мне одну сливу из корзинки, меньше 40 граммов, если есть такие, и дай любую, если все больше 40" (Маша достает наименьшую сливу). Если эта слива < 40г, я получил что просил, претензий нет. Если эта слива >= 40, значит в корзинке нет ничего меньше. Претензий снова нет. Маша, будучи подкована в математике, упростила задачу заменив ее на более строгую. Зато теперь ей не нужны точные весы с указанием граммов, и ее алгоритм годится для любой границы: 40, 50, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 22:03 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
НеофитSQL которое не упоминает 40, но выполняет условие. Попробую по-другому: я видел много постановок и много реализаций. Подобные границы в постановках исходят от бизнеса. Попытка "оптимизировать" постановку методами "мне так проще" или "я так вижу" обычно приводит к рекламации и необходимости переделывать, поскольку до разраба редко доводят весь контекст задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 22:11 |
|
Вывод уникальных записей
|
|||
---|---|---|---|
#18+
Ну разве так, чтоб контекст в коде не терять на случай передумал/недослышал. Если в колледже хотят готовить толковых специалистов, вместо методов сортировки лучше бы учили как составлять тех задание. Чтоб потом сто раз не переделывать потому что заказчик сам не знал, что ему нужно. И навыки сорс контроля какие-нибудь вместо теории компиляторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 22:31 |
|
|
start [/forum/topic.php?fid=52&fpage=37&tid=1880896]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 443ms |
0 / 0 |