Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Уникальные значения в одном столбце  (Прочитано 20387 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« : 06-04-2010 08:36 » 

Как произвести выборку всех данных из таблицы так, чтобы в полученном результате присутствовали только данные с уникальным значением одного столбца.

То есть, есть таблица
name sex
коля M
валя Ж
дуня Ж
вася M
ярик M

Нужно получить:
name sex
вася M
валя Ж
« Последнее редактирование: 06-04-2010 08:58 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-04-2010 08:41 » 

а чем
валя Ж
отличается от
дуня Ж

И то, и то уникальны
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 06-04-2010 09:17 » 

ну тогда по другому))) нужно выбрать по все одной ячеке в столбце name, с уникальными значениями в sex, отсортировав name по алфовиту)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-04-2010 09:22 » 

select distinct * from table

Это имелось ввиду?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 06-04-2010 09:25 » 

select distinct * from table - неподойдет, так как выберет все что есть)))
distinct - указывает, что не должно быть совпадений в результате, и с его точки зрения валя Ж и дуня Ж - несовпадают, а мне нужно, что бы совпадений в столбце sex небыло!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-04-2010 10:36 » 

Dracul, подсказка уже дана: ключевое слово DISTINCT. Ознакомься с документацией к своей СУБД - там такая конструкция должна быть.

Код:
SELECT DISTINCT name, sex FROM mytable ORDER BY name, sex
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 06-04-2010 10:57 » 

Скажи что тебе надо конкретно

Чтобы была только Валя Ж
потому что она первая в выборке?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 06-04-2010 12:07 » 

RXL, запросс SELECT DISTINCT name, sex FROM mytable ORDER BY name, sex
приведет к тому, что будут выбраны все записи, с уникальными значениями пары name, sex
А мне надо немного другое.
1) получить все возможные варианты поля sex
2) получить по одному вариант name, для каждого полученного значения sex
все это сделать в одном запроссе
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 06-04-2010 12:20 » 

Dracul,
Код: (SQL)
SELECT  name, sex FROM mytable GROUP BY name ORDER BY name, sex;
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 06-04-2010 12:34 » 

Finch, нет смысла делать group by
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 06-04-2010 12:53 » 

Finch, будет выдавать больше чем по одному варианту name
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 06-04-2010 13:00 » 

Dracul, Ты хочеш групировать по полу? Ну тогла поставь group by sex. Кстати глубинного смысла данной выборки я тогда не понимаю.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 06-04-2010 13:04 » 

Finch, мерси, понял.
в смысле глубинного смылса?

Попробывал добавить 3-е поле, что бы name выводилось в зависимости от значений в нем, и неработает((
Допустим добавил поле date (с днями рождения), что бы выводилось по одному name, каждого sex, причем тот name, у которого самое большое значение date
« Последнее редактирование: 06-04-2010 13:10 от Dracul » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 06-04-2010 13:26 » 

Dracul, ты уж сразу запросы показывай.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 06-04-2010 13:44 » 

Ок, тогда упрощу таблицу, пусть в ней будет три столбца и следующие значения:
Id name sex
1  коля   M
2  валя   Ж
3  дуня   Ж
4  вася    M
5  ярик    M

В результате выборки, должно выбраться (то есть то что я хочу достичь) по одному полю name для каждого существующего варианта sex, и что бы поля name были отсортированы по id в обратном порядке:
Id name sex
5  ярик    M
3  дуня   Ж

Использую предложенный запрос Finch SELECT  id, name, sex FROM mytable GROUP BY sex ORDER BY id DESC, sex;
выводиться:
Id name sex
2  валя   Ж
1  коля   М
то есть не совсем то, что надо
« Последнее редактирование: 06-04-2010 13:47 от Dracul » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 06-04-2010 14:42 » 

Зачем?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 07-04-2010 05:44 » 

это упрощенно, что мне надо.
Собственно говоря, в релальном задании, нужно, получить по одной статье, из каждой категории, причем статьи должны быть самыми свежими
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 07-04-2010 06:04 » 

Dracul, ну так бы сразу и говорил, что тебе нужно.
А то твои упрощенности - бред
Показывай структуру твоих таблиц и запросы к ней

зы. не боись, нам твой код и твои секреты не нужны, просто нужно говорить на одном языке.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 07-04-2010 06:31 » 

да не боюсь я, просто реально думал так проще будет)))

таблица имеет следующие поля:
id - первичный идентификатор
date_start - дата публикации
name - название
info - текст
catalog_id - ID каталога

вопрос все тот-же. как одним запросом получить по одной строке, для каждого возможного catalog_id, с сортировкой по полю date_start. То есть нужно вывести по 1-ой статье из каждой категории, так что бы статьи были отсортированны по дате публикации.
Изначально мы не знаем сколько у нас различных значений catalog_id в таблице.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 07-04-2010 06:33 » 

да не боюсь я, просто реально думал так проще будет)))
Offtopic:

что может быть проще копи-паста ? Улыбаюсь
Поставлю в угол.

Записан

Falsehood
Молодой специалист

ru
Offline Offline
Пол: Женский
не может быть


« Ответ #20 : 07-04-2010 12:02 » 

что-то, типа такого?
Код:
select a.id, b.date_start, a.name, a.info, b.catalog_id
from <table_name> a inner join (select max(date_sart) as date_start, catalog_id
                                                    from <table_name>
                                                    group by catalog_id) b on a.date_start = b.date_start and a.catalog_id = b.catalod_id
order by date_start

P.S. по-моему, к web-у прямого отношения не имеет
« Последнее редактирование: 07-04-2010 12:04 от Falsehood » Записан

Славная трава...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #21 : 07-04-2010 12:05 » 

Думаю тут будет чуть сложный запрос
Код: (SQL)
SELECT *
FROM TABLE t,
          (SELECT MAX(date_start) AS date_max, catalog_id FROM TABLE GROUP BY catalog_id) AS tz
WHERE tz.date_max = t.date_start AND tz.catalog_id = t.catalog_id;
запрос не проверял, возможны ошибки Улыбаюсь

PS  Falsehood опередила Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 07-04-2010 12:28 » 

что в таблице уникально?

таблица имеет следующие поля:
id - первичный идентификатор    Это понятно
date_start - дата публикации  Это понятно
name - название
info - текст   Текст нужен только для выборки и других целей
catalog_id - ID каталога

Осталось Два, неуникальных поля

name - название
catalog_id - ID каталога


Строим вспомогательный запрос

Выбираем по макс дату
по имени

select max(date_start), catalog_id
from my_table
where name='Заданное условие'
group by catalog_id


Имея подготовленный запрос

SELECT *
FROM may_table t,
(select max(date_start), catalog_id
from my_table
where name='Заданное условие'
group by catalog_id) as t2
WHERE t2.catalog_id = t.catalog_id
order by date_start




Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 07-04-2010 17:49 » new

всем большое спасибо, отдельно еще и Sla за разбор по полочкам, и запрос получил и понял как он работает)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines