Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь со сложным запросом, возможно только для меня сложным =) 
:(
    Опции темы
B2_Russia
Дата 20.1.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Выборка, как ни странно, по 1 таблице, вернее по нескольким, но остальное дострою сам.

Есть таблица в которую пишутся некоторые данные по автомобилям, с полями:

Код

mark_id, // марка автомобиля
model_id, // модель 
age, // возраст авто
post_date // дата появления записи в таблице


Записей может быть много.

Требуется сделать статистическую выборку например по 10 самым востребованным авто. 
То есть нужно выдать пользователю таблицу вида:

------------------------------------------
Модель, марка|число записей
------------------------------------------

Код

SELECT DISTINCT mark_id, model_id FROM autos;


Из этого запроса собсно только присутствующие в таблице модели без повторений, но как ввести в результат поле с количеством записей по модели?

PM WWW ICQ   Вверх
skyboy
Дата 20.1.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Код

SELECT mark_id, model_id, count(*)
FROM autos
GROUP BY mark_id,model_id

конечно, если неуказанная тобой СУБД поддерживает SQL'92 в отношении группировки посредством секции GROUP BY, и агрегирующие функции(в часности - count).
PM MAIL   Вверх
B2_Russia
Дата 20.1.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Хе хе... mySQL, мда, что то я туплю маленько, если это работает то я себя ламером чувствую =)
Щас проверю.
Спасибо тебе, добрый человек! А то я б щас это через Юнион стал делать, ужос, спать пора...
PM WWW ICQ   Вверх
B2_Russia
Дата 21.1.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Код

SELECT mark_id, model_id, count(*) AS count
FROM autos
GROUP BY mark_id,model_id ORDER BY count DESC


Да это оно!
Спасибо еще раз ;)
PM WWW ICQ   Вверх
skyboy
Дата 21.1.2008, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(B2_Russia @  20.1.2008,  23:31 Найти цитируемый пост)
count(*) AS count

с обратными апострофами(`) было бы ничего. а в таком использовании псевдоним принесет больше труда, чем пользы.
т.е. должно быть вот так:
Код

SELECT mark_id, model_id, count(*) AS `count`
FROM autos
GROUP BY mark_id,model_id 
ORDER BY `count` DESC

остальные поля тоже не мешало бы "обернуть":
Код

SELECT `mark_id`, `model_id`, count(*) AS `count`
FROM `autos`
GROUP BY `mark_id`,`model_id` 
ORDER BY `count` DESC

Потому что, если в секцмм ORDER BY вызов агрегирующих функций ещё невозможен, то упоминание "count" трактуется(видимо) только как заданный тобою псевдоним поля. а вот в where такое упоминание могло бы означать уже либо псевдоним, либо агрегирующую функцию count. а в обратных апострофах - только псевдоним/имя поля может быть. потому СУБД смысл определяет однозначно.
--
почему не задал вопрос в разделе "MySQL"? Вроде же не в первый раз здесь...
PM MAIL   Вверх
Akina
Дата 21.1.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(B2_Russia @  20.1.2008,  23:50 Найти цитируемый пост)
Требуется сделать статистическую выборку например по 10 самым востребованным авто.

Добавь в предложенный тебе текст еще и Limit


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.