powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться люди добрые!
7 сообщений из 7, страница 1 из 1
Помогите разобраться люди добрые!
    #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
Помогите разобраться люди добрые!
    #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
Помогите разобраться люди добрые!
    #39025611
vananos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Данный вариант не подходит так как записей может быть n-ое количество.
...
Рейтинг: 0 / 0
Помогите разобраться люди добрые!
    #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
Помогите разобраться люди добрые!
    #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
Помогите разобраться люди добрые!
    #39025671
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убери лимит в запросе,
я думал те одну запись надо
...
Рейтинг: 0 / 0
Помогите разобраться люди добрые!
    #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
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться люди добрые!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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