Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.037 c
1-1084610801
fish
2004-05-15 12:46
2004.05.30
Загрузка программы


6-1081347770
Livid
2004-04-07 18:22
2004.05.30
Mailslots


4-1082040213
Дубинин Алексей
2004-04-15 18:43
2004.05.30
Определение количества оперативной памяти работающего приложения


3-1083762745
VEN
2004-05-05 17:12
2004.05.30
Типы dBase


14-1084300671
Vasya.ru
2004-05-11 22:37
2004.05.30
где взять 6ти знак?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский