Получить максимальное значение столбца из набора строк - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть такая таблица

Table A:

Id Count
1  4
1  16
1  8
2  10
2  15
3  18
etc

Table B:
1 sample1.file
2 sample2.file
3 sample3.file

TABLE C:
Count fileNumber
16 1234
4 2345
15 3456
18 4567

и так далее ...

Что мне нужно, это

1 sample1.file 1234
2 sample2.file 3456
3 sample3.file 4567

Чтобы получить максимальное значение изиспользуемый AI таблицы

  Select MAX (Count) from A where Id='1'

Это работает хорошо, но моя проблема заключается в объединении данных с другой таблицей.

Когда я присоединяюсь к таблице B и таблице A, мне нужно получить MAX для всех идентификаторови в моем запросе я не знаю, что такое Id.

Это мой запрос

SELECT B.*,C.*
JOIN A on A.Id = B.ID
JOIN C on A.id = B.ID
WHERE (SELECT MAX(COUNT) 
         FROM A 
        WHERE Id = <what goes here????>)

Подводя итог, я хочу, чтобы значения из таблицы B, FileNumber из таблицы c (где подсчетявляется Макс. для идентификатора из таблицы A).

ОБНОВЛЕНИЕ: Исправление таблицы C выше.Похоже, мне нужен стол А.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Я думаю, что это запрос, который вы ищете:

select b.*, c.filenumber from b
join (
  select id, max(count) as count from a
  group by id
) as NewA on b.id = NewA.id
join c on NewA.count = c.count

Однако вы должны принять во внимание, что я не понимаю, почему для id = 1 в таблице A вы выбираете 16 для соответствиядля таблицы C (которая является максимальной) и для id = 2 в таблице A вы выбираете 10 для сопоставления с таблицей C (которая является минимальной).Я предположил, что вы имели в виду максимум в обоих случаях.

Редактировать:

Я вижу, вы обновили данные таблицы A.Запрос приводит к этому, учитывая предыдущие данные:

+----+---------------+------------+
| ID |   FILENAME    | FILENUMBER |
+----+---------------+------------+
|  1 | sample1.file  |       1234 |
|  2 | sample2.file  |       3456 |
|  3 | sample3.file  |       4567 |
+----+---------------+------------+

Вот рабочий пример

1 голос
/ 27 февраля 2012

Используя рабочий пример Mosty (переименование количества ключевых слов в cnt для имени столбца), это другой подход:

with abc as (
  select
    a.id,
    a.cnt,
    rank() over (
      partition by a.id
      order by cnt desc
    ) as rk,
    b.filename
  from a join b on a.id = b.id
)
  select
    abc.id, abc.filename, c.filenumber
  from abc join c
  on c.cnt = abc.cnt
  where rk = 1;
0 голосов
/ 27 февраля 2012
select
      PreMax.ID,
      B.FileName,
      C2.FileNumber
   from
      ( select C.id, max( C.count ) maxPerID
           from TableC C
           group by C.ID
           order by C.ID ) PreMax

         JOIN TableC C2
            on PreMax.ID = C2.ID
           AND PreMax.maxPerID = C2.Count

         JOIN TableB B
            on PreMax.ID = B.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...