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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести кол-во 5 популярных + добавить "Остальное", Посчитать сумму "Другого". MySQL 
:(
    Опции темы
JEEN
Дата 11.12.2015, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

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



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

Цитата

20 - Москва
10 - СПб 
5 - Екатеринбург
5 - Другое 


"Другое" - это количество клиентов из городов, не вошедших в ТОП3.

Таблицы:
- clients (id, city_id) - Клиенты
- cities (id, name) - Города

Сделал вот такой запрос, но в "Другое" он заносит количество клиентов из всех городов, не исключая те, что вошли в ТОП3
Код

(SELECT 
      count(city_id) as city_count, 
      cities.name as city_name
FROM clients
INNER JOIN cities ON clients.city_id = cities.id
GROUP BY city_id
ORDER BY city_count DESC
LIMIT 3)

UNION

(SELECT 
      count(city_id) as city_count,
      "Другое" as city_name
FROM clients)


Во второй запрос хотел добавить WHERE city_id NOT IN (...упрощенный_первый_запрос...), но он ругается на LIMIT 3, говорит, что в MySQL нельзя в подзапросах писать LIMIT

Это сообщение отредактировал(а) JEEN - 11.12.2015, 19:09
PM MAIL   Вверх
Akina
Дата 11.12.2015, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

Репутация: 45
Всего: 453



Цитата(JEEN @  11.12.2015,  20:07 Найти цитируемый пост)
ругается на LIMIT 3, говорит, что в MySQL нельзя в подзапросах писать LIMIT

В подзапросах нельзя, а вот в представлениях - можно!




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

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

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



Цитата
В подзапросах нельзя, а вот в представлениях - можно!

Спасибо за наводку, но не смог с ними разобраться

Сделал так, вроде работает
Код

(SELECT 
      count(city_id) as city_count, 
      cities.name as city_name
FROM clients
INNER JOIN cities ON clients.city_id = cities.id
GROUP BY city_id
ORDER BY city_count DESC
LIMIT 3)

UNION

(SELECT 
      count(city_id) as city_count,
      "Другое" as city_name
FROM clients 
WHERE city_id IN (
      SELECT * 
      FROM (
            SELECT count(city_id) as city_count 
            FROM clients 
            WHERE city_id IS NOT NULL 
            GROUP BY city_id 
            ORDER BY city_count DESC 
            LIMIT 3
      ) as t
))


Это сообщение отредактировал(а) JEEN - 11.12.2015, 23:42
PM MAIL   Вверх
Akina
Дата 11.12.2015, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

Репутация: 45
Всего: 453



Цитата(JEEN @  12.12.2015,  00:32 Найти цитируемый пост)
не смог с ними разобраться

Не смог разобраться с CREATE VIEW?  smile 

Цитата(JEEN @  12.12.2015,  00:32 Найти цитируемый пост)
Сделал так

Жуть какая...
Кстати, если 3 и 4 записи имеют одинаковый COUNT(city_id) - твой запрос будет выдавать то одну из них в топе, то другую... 


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

PM MAIL WWW ICQ Jabber   Вверх
JEEN
Дата 12.12.2015, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

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



Цитата
Не смог разобраться с CREATE VIEW?  smile 

2 раза попробовал, не получилось, пошел в поисковик по запросу с ошибкой и нашел какое-то решение. Оно, кстати, не работает... С Create view сейчас разобрался, но мне не нравится, что 2 таблицы лишних появляются, пусть лучше будет хардкорд в запросе.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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