powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для вывода самого часто встречающегося Поля2 для Поля1
6 сообщений из 6, страница 1 из 1
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788706
glassira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть Access 2010 и куча данных в нём. Смысл запроса. Есть таблица с номерами реестров операций (pifile) и названиями организаций (org), по которым эти операции проходят. Нужно для каждого реестра найти самую часто встречающуюся организацию. В результате нужен список соответствий - Реестр-Организация. Если самых часто встречающихся организаций несколько, то реестр в итоговый запрос выводить не нужно.

Сначала создала запрос, группирующий пары Реестр-Организация и подсчитывающий, сколько таких пар получилось. Назвала его A:
Код: sql
1.
2.
3.
Select pifile, org, count(pifile) as [counted]
From table
Group by pifile, org


Дальше пытаюсь найти самые часто встречающиеся организации для реестров и отбросить повторяющиеся реестры
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Select B.pifile, B.maxcount, A.org
From
   (Select pifile, max(counted) as [maxcount]
   From A
   Group by pifile) as B
Inner Join A on B.pifile=A.pifile And B.maxcount=A.counted
Group by B.pifile, B.maxcount, A.org  //по чему группировала точно не помню, но вряд ли мне удалось бы сделать группировку по-другому
Having Count(B.pifile)=1


Без группировки и Having Count(B.pifile)=1 в итоговую таблицу попадало много записей с повторяющимися номерами реестров. Когда это добавила, повторов стало меньше.
Откуда они вообще берутся, и можно ли как-то их убрать (если самых повторяющихся организаций по реестру больше одной, то она не нужна)?
...
Рейтинг: 0 / 0
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788709
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glassira, у каждой самой встречающейся организации max-имальное количество встречаний, так ведь? смысл во встроенном запрсое во втором запросе - то зачем, а вот там лепят max- просто joinoм счета объединить религия не позволяет?
...
Рейтинг: 0 / 0
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788714
glassira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
aleckoу каждой самой встречающейся организации max-имальное количество встречаний
Да, для каждого pifile у самой часто встречающейся организации будет максимальное количество повторов
aleckoво встроенном запросе во втором запросе
Я считаю максимальное количество повторов организаций для каждого pifile
aleckoпросто joinoм счета объединить
Простите, не очень поняла идею. Что с чем стоит объединить?
...
Рейтинг: 0 / 0
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788755
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glassira,
ищете организации а группируете счета?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Select pifile, org, max(org) as maxorg
From table ' что прям так и называется table?
Group by pifile, org
'здесь уже получили счета организации и их количество в каждом счете
select  org, count(org) as kolorg
from a
' здесь посчитали сколько у нас организаций в максимальных ходят и какие
...
Рейтинг: 0 / 0
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788756
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glassiraНужно для каждого реестра найти самую часто встречающуюся организацию.А если таковых несколько - нужны все? один любой? один конкретный?

Схематично для варианта "нужны все".

Первый запрос (query1) получает количество по паре реестр-организация
Код: sql
1.
2.
3.
SELECT pifile, org, count(pifile) as [counted]
From table
Group by pifile, org


Второй запрос (query2) получает максимальное counted для реестра
Код: sql
1.
2.
3.
SELECT pifile, MAX(counted) max_counted
FROM query1
GROUP BY pifile


Третий отбирает пары реестр-организация с макс. количеством
Код: sql
1.
2.
3.
SELECT query1.pifile, query1.org
FROM query1,query2
WHERE query1.pifile = query2.pifile AND query1.counted = query2.max_counted



Есссно всё это легко собирается в один запрос.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT query1.pifile, query1.org
FROM (SELECT pifile, org, count(pifile) as [counted]
      FROM table
      GROUP BY pifile, org) AS query1, 
     (SELECT pifile, MAX(counted) max_counted   
      FROM (SELECT pifile, org, count(pifile) as [counted]
            FROM table
            GROUP BY pifile, org) AS query1
      GROUP BY pifile) AS query2
WHERE query1.pifile = query2.pifile AND query1.counted = query2.max_counted



Для других вариантов делаете аналогично, вводя, где нужно, TOP1 или соотв. WHERE.
...
Рейтинг: 0 / 0
Запрос для вывода самого часто встречающегося Поля2 для Поля1
    #39788762
glassira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо, буду пробовать
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для вывода самого часто встречающегося Поля2 для Поля1
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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