Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться люди добрые! / 7 сообщений из 7, страница 1 из 1
08.08.2015, 19:21:22
    #39025571
vananos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
Добрый день!
Есть следующий запрос

SELECT dept_id
FROM (
SELECT dept_id, COUNT( * ) AS counted
FROM staff
GROUP BY dept_id
) AS k
WHERE (SELECT MAX(k.counted) FROM k)
= k.counted

MySQL ругается 1146 - Table 'test.k' doesn't exist

Задача состоит в том что необходимо найти такие dept_id у которых максимальное количество связанных записей в другой таблице.
Таблица №1 (deptartments)
id - ID отдела
-------
name - название

таблица №2 (
id- id сотрудника
--------------------
dept_id -id отдела

Вариант с упорядочиванием по убыванию и использованием первой записи как результата не рассматриваю, так как может быть несколько отделов с максимальным числом сотрудников.
Заранее спасибо!
...
Рейтинг: 0 / 0
08.08.2015, 21:33:20
    #39025607
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
Код: sql
1.
2.
3.
4.
5.
6.
  
SELECT dept_id, COUNT( * ) AS counted
FROM staff
GROUP BY dept_id
ORDER BY counted DESC
LIMIT 1
...
Рейтинг: 0 / 0
08.08.2015, 21:41:23
    #39025611
vananos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
bochkov,

Данный вариант не подходит так как записей может быть n-ое количество.
...
Рейтинг: 0 / 0
08.08.2015, 22:20:06
    #39025618
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
vananos,

Код: sql
1.
2.
3.
4.
5.
SELECT dept_id, COUNT( * ) AS counted
FROM staff
GROUP BY dept_id
ORDER BY counted DESC
LIMIT :n
...
Рейтинг: 0 / 0
08.08.2015, 23:10:02
    #39025628
vananos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
Всем спасибо за участие !

MasterZiv,

Увы n тоже неизвестно заранее.

Решил проблему сам, путем создание временной таблицы, которая хранит пару (dept_id, количество повторений dept_id) и переменной хранящей максимальное значение повторений.
Может кому нибудь пригодится решение подобной задачи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TEMPORARY TABLE   `new_t` AS (
SELECT `dept_id`, COUNT( * ) AS `counted`
FROM `staff`
GROUP BY `dept_id`
);
SET @maximum =  (SELECT MAX(`counted`) FROM `new_t`);
SELECT `depts`.* 
FROM `depts`
INNER JOIN `new_t` ON `new_t`.`dept_id` = `depts`.`id`
WHERE `new_t`.`counted` = @maximum
...
Рейтинг: 0 / 0
09.08.2015, 09:42:46
    #39025671
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
убери лимит в запросе,
я думал те одну запись надо
...
Рейтинг: 0 / 0
09.08.2015, 10:48:14
    #39025687
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться люди добрые!
В MS SQL есть конструкция SELECT TOP(1) WITH TIES
Аналогичной конструкции в MySQL нет, поэтому нужно либо задействовать временную таблицу, либо дважды выполнять группировку, причем второй раз - с подсчетом максимального значения. Типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select id, count(*) qty
from myTable
group by id
having count(*)=(
  select max(qty)
  from(
    select count(*)qty
    from myTable
    group by id
    )g
  );
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться люди добрые! / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]