Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизDISTINCT? Найти похожие ветки
← →
Piter © (2004-05-10 00:22) [0]Как можно извлечь все поля, но чтобы поле Some не повторялось?
← →
jack128 © (2004-05-10 00:40) [1]Если остальные поля - числовые, то можно взять агрегатные функции от этих полей
select Some, avg(DigitField)
from MyTable
group by Some
← →
Курдль © (2004-05-10 01:10) [2]
> Как можно извлечь все поля, но чтобы поле Some не повторялось?
Все зависит от того, как Вы хотели бы потерять подлинные значения остальных полей. Если привести к агрегатным - [1].
А если нет, то по какому принципу выбирать единственную и неповторимую строку?
← →
Piter © (2004-05-10 02:23) [3]Вы, наверное, не поняли.
Допустим:SELECT DISTINCT Field1
вернет только поле Field1 у записей. А мне надо вернуть все поля у записи, но чтобы поле Field1 не повторялось. Аля:SELECT * DISTINCT Field1
← →
Johnmen © (2004-05-10 03:09) [4]СУБД ?
← →
Anatoly Podgoretsky © (2004-05-10 09:15) [5]А нету
← →
Piter © (2004-05-10 13:14) [6]>Johnmen © (10.05.04 03:09) [4]
Firebird
← →
Курдль © (2004-05-10 13:18) [7]
> вернет только поле Field1 у записей. А мне надо вернуть
> все поля у записи, но чтобы поле Field1 не повторялось.
> Аля:
>
> SELECT * DISTINCT Field1
Это понятно! Но ведь если у Вас 2 записи с одинаковым полем Field1, то какая-то из них будет утеряна. Вы определитесь - какая! Первая? Последняя? Или остальные поля в таких записях будут усреднены (выбраны максимальные и т.п)?
← →
sniknik © (2004-05-10 13:21) [8]SELECT * FROM Table1 WHERE ID IN (SELECT Min(ID) FROM Table1 GROUP BY Field1)
ID должен быть автоинкрементом по синтаксису других баз (с генератором по синтаксису Firebird).
← →
Курдль © (2004-05-10 13:26) [9]
> sniknik © (10.05.04 13:21) [8]
Ну Вы бы объяснили человеку, что по выполнению такого запроса будут выбраны первые строки с уникальным Field1, а остальные - потеряны!
> ID должен быть автоинкрементом по синтаксису других баз
> (с генератором по синтаксису Firebird).
А сказать "первичный ключ" для Firebird язык не повернулся?
← →
sniknik © (2004-05-10 13:36) [10]> Ну Вы бы объяснили человеку, что по выполнению такого запроса будут выбраны первые строки с уникальным Field1, а остальные -
> потеряны!
обьясняли уже, не понял других и неня не поймет. а попробует (если не просто куски п рограмму лепит, а пробует перед этим) сам поймет.
> А сказать "первичный ключ" для Firebird язык не повернулся?
оно необязательно должно быть первичным ключем, обязательно должно возрастать (инкремент), или убывать.
← →
Курдль © (2004-05-10 13:42) [11]
> оно необязательно должно быть первичным ключем, обязательно
> должно возрастать (инкремент), или убывать.
Да нет такого понятия "инкремент/декремент". Есть понятие "первичный ключ" и "уникальное поле". Как правило, в 99% случаев в таблице достаточно одного уникального поля - первичного ключа. А для Вашего случая - и подавно!
← →
sniknik © (2004-05-10 14:33) [12]> Да нет такого понятия "инкремент/декремент".
словарь Lingvo
increment (Словари: Общ. лексика англ.; Экономика англ.; Компьютерный англ.)
сущ.
1)
а) возрастание, расширение, увеличение
an increment in salary — увеличение зарплаты
daily increments to our knowledge — ежедневное возрастание наших знаний
Syn:
enlargement, increase 1., augmentation, growth
б) геральдика прибывание (о луне)
The moon is in increment, when her horns point to the dexter. — Луна находится в стадии прибывания, когда на геральдическом поле ее рога указывают влево от зрителя.
2) приращение, прирост, надбавка, прибыль
increment of rent — надбавка к арендной плате
The increment of heat which proves fatal is from 11 deg. to 12 deg. Fahr. above the natural temperature of the animal. — Рост температуры относительно нормы на 11-12 градусов по Фаренгейту является для животного фатальным.
Syn:
increase, growth
3) матем. бесконечно малое приращение; инкремент; дифференциал
MSSQL
incremental values
incrementally updating cubes
incrementally updating dimensions
а Вы что имели ввиду?
← →
Курдль © (2004-05-10 14:45) [13]
> MSSQL
> incremental values
> incrementally updating cubes
> incrementally updating dimensions
>
> а Вы что имели ввиду?
Я имел в виду понятия из теории реляционных баз данных, а Вы?
← →
sniknik © (2004-05-10 14:54) [14]оно необязательно должно быть первичным ключем, обязательно должно возрастать (инкремент), или убывать.
← →
Курдль © (2004-05-10 14:58) [15]
> оно необязательно должно быть первичным ключем, обязательно
> должно возрастать (инкремент), или убывать.
Да никому не интересно, по какому закону оно меняется (убывает, возрастает, логарифмически, экспоненциально и т.п.) главное, чтобы не повторялось! Это и называется уникальное поле!
← →
sniknik © (2004-05-10 15:14) [16]именно на это запрос завязан, оно должно возрастать, и ему вовсе не обязательно ему быть уникальным, и ключевым, повторения будут дублироватся и все (хотя и не должны по условию если оно инкрементируется, но не смертельно, сразу видно глюк в данных).
p.s. сними шоры с глаз. ID не обязан быть ключем только потому что ты так привык, также не обязан быть уникальным потому что по твоему оно так называется. (прочитай [8] еще раз, там дан тот минимум что необходим по условию, а вот все что ты себе навоображал вот это как раз не имеет значения)
← →
Anatoly Podgoretsky © (2004-05-10 15:14) [17]И чего стулья ломаете, разные это вещи первичный ключ и (авто)инкриметные поля. Не пересекаются, хотя оба обеспечивают уникальность (для случая авто).
← →
Lola © (2004-05-10 15:24) [18]Я конечно дико извиняюсь, что вмешиваюсь в спор титанов, но мне почему-то показалось, что вопрос стоит о том, чтобы значение поля Some выводилось только в первой строке, а в остальных записях, где значение повторяется, выводилось пустое значение. Тогда никакие другие данные не будут потеряны.
← →
Anatoly Podgoretsky © (2004-05-10 15:32) [19]Lola © (10.05.04 15:24) [18]
Может быть, как обычно невнятно объяснено.
← →
sniknik © (2004-05-10 15:39) [20]да но если это так > [18] то это так просто (запросом) не решить, или очень навороченным и ограниченным (на количество возможных Some к примеру) или процедурой.
← →
Anatoly Podgoretsky © (2004-05-10 15:46) [21]sniknik © (10.05.04 15:39) [20]
Такое иногда нужно в отчетах, а там это решается элементарно, а вод вывод в грид, придется покрутиться, подменяя информацию в буферах или в возвращаемом результате. Количество Some естесвенно может достигать внушительных размеров и при том быть не сортированым, что еще значительнее усложняет задачу, но мы то можем только гадать и каждый по мере своей испорченности.
← →
Piter © (2004-05-10 15:51) [22]
> Но ведь если у Вас 2 записи с одинаковым полем Field1, то
> какая-то из них будет утеряна
Ясно... Ну а как реализовать, чтобы была выбрана:
1) Первая
2) Последняя
3) та запись, у которой максимальные значения по другим полям (если поля числовые)?
> обьясняли уже, не понял других и неня не поймет
что-то я не узрел, чтобы мне кто-то объяснил.
select Some, avg(DigitField)
from MyTable
group by Some
А разве такой запрос не вернет одно поле Some у разных записей?
Мне ведь нужно, чтобы и другие поля были возвращены.
К тому же поля не числовые...
SELECT * FROM Table1 WHERE ID IN (SELECT Min(ID) FROM Table1 GROUP BY Field1)
ID должен быть автоинкрементом по синтаксису других баз (с генератором по синтаксису Firebird).
А если у меня нет поля ID? То есть, в базе нет ни одного уникального поля. Вот совокупность двух полей - уникальна.
И вообще:SELECT Min(ID) FROM Table1 GROUP BY Field1
разве не вернет всего одну запись?
← →
Piter © (2004-05-10 16:04) [23]Могу еще раз показать на примере. Допустим, есть база:
Name Telephone
-------------------
Mikle 111111
Sasha 222222
Alena 333333
Vitya 222222
Alexey 444444
Vladimir 111111
Теперь я хочу выбрать уникальные номера телефонов, но если напишу что-то типа:SELECT DISTINCT Telephone
то получу:Telephone
---------
111111
222222
333333
444444
То есть, поле Name не будет возвращено. А мне хочется его вернуть также.
Встал вопрос - какие записи терять. В данном примере выбрать Vitya или Sasha
и
Vladimir или Mikle.
Покажите плиз разные варианты...
← →
Lola © (2004-05-10 16:11) [24]Ты б почитал мой предыдущий пост...
Я тебе предлагаю вариант, в итоге которого получаешь:Mikle 111111
Vladimir
Sasha 222222
Vitya
Alena 333333
Alexey 444444
Подходит? но одним Distinct-ом не обойдешься, надо использовать UNION.
← →
Курдль © (2004-05-10 16:15) [25]
> Встал вопрос - какие записи терять. В данном примере выбрать
> Vitya или Sasha
> и
> Vladimir или Mikle.
>
> Покажите плиз разные варианты...
Варианты:
1. Потерять Vitya и Vladimir.
2. Потерять Vitya и Mikle.
3. Потерять Sasha и Vladimir.
4. Потерять Sasha и Mikle.
А самому-то что надо? Если сам не знаешь, то как мы узнаем?
Есть еще вариант - лаконично, но более конкретно описать свою проблему.
← →
Vlad © (2004-05-10 16:31) [26]Как вариант:
select max(name), telephone from table group by telephone
← →
sniknik © (2004-05-10 16:54) [27]>> обьясняли уже, не понял других и неня не поймет
> что-то я не узрел, чтобы мне кто-то объяснил.
ты просто не понял (не захотел) см > Курдль © (10.05.04 13:18) [7]
а вот теперь видать дошло, вот и появились подробности структуры и уточнения вопроса.
Vlad © (10.05.04 16:31) [26]
> Как вариант:
+ min(name), потеряеш других.
← →
sniknik © (2004-05-10 17:13) [28]> И вообще:
> SELECT Min(ID) FROM Table1 GROUP BY Field1
> разве не вернет всего одну запись?
одну на каждую группу, т.е. по одной на каждое уникальное значение Field1.
← →
Piter © (2004-05-10 17:25) [29]Варианты:
1. Потерять Vitya и Vladimir.
2. Потерять Vitya и Mikle.
3. Потерять Sasha и Vladimir.
4. Потерять Sasha и Mikle
Блин, ну совсем за олуха меня не держите. Я понимаю, что можно потерять. Вот и прошу - приведите примеры запросов, когда теряются одни и примеры запросов, когда теряются другие.
Подходит? но одним Distinct-ом не обойдешься, надо использовать UNION
В принципе, интересно было бы посмотреть на реализацию запроса.
А так эти пустые поля необязательны, возвращать их не надо.
ты просто не понял (не захотел) см > Курдль © (10.05.04 13:18) [7]
а вот теперь видать дошло, вот и появились подробности структуры и уточнения вопроса
sniknik, а ты сегодня в плохом настроении, да?
А то бы ты увидел, что я задавал вопросы ДО поста №7, где Курдль объяснял. ПОСЛЕ этого поста у меня возникли уже другие вопросы, которые я задаю сейчас. Так что не надо наездов. И обсуждать эту тему не надо, дабы не плодить оффтоп.
← →
Vlad © (2004-05-10 17:49) [30]
> Piter © (10.05.04 17:25) [29]
Так что, [26], [27] не подходит ?
← →
Erik © (2004-05-10 17:50) [31]Я кажется телеатией овладел! Ну проверим, может тебе так подойдет: Select Some, count(Some) as MyCount name from myTable group by Some, name having MyCount > 1.
Не нихрена непонял, видать телепатию еще развивать надо :(
← →
Piter © (2004-05-12 19:23) [32]sniknik © (10.05.04 17:13) [28]
Разобрался... немного не так себе представлял работу GROUP BY
А можно сделать нужный мне запрос без вложенных запросов?
Всем спасибо, извините, что отнял времени. Ну ламер, что поделать...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.031 c