2015-08-26 1 views
0

Я пытаюсь получить строку с наибольшим числом col5, основываясь на сумме, как показано ниже:В MS Access, как получить наибольшую строку в каждой группе

SELECT 
    Col1, 
    Col2, 
    col3, 
    col4, 
    SUM(col5) AS TOTAL_col5 
FROM table1 
WHERE (((Col1)=variable1) AND ((col3)="variable2")) 
GROUP BY  
    Col1, 
    Col2, 
    col3, 
    col4 
ORDER BY 
    col4, 
    SUM(col5) AS TOTAL_col5 DESC 

Я попытался с помощью Top 1 в select хотя это возвращает только одну строку, я также пытался сделать MAX(SUM(col5) AS TOTAL_col5), но я получаю ошибки, потому что кажется, что вы не можете комбинировать агрегаты. Я думаю, что ответ - это подзапрос, но я не могу обдумать, как его написать.

Подробнее см. HarveyFrench: Я ищу внешний запрос, который затем вернет таблицу с самой большой суммой в col5 для каждой комбинации столбцов с 1 по 4. (Внутренний запрос возвращает ВСЕ суммы для каждого комбинация). Основываясь на его входе я попытался следующие, но она по-прежнему возвращает Everyting

SELECT 
     T1.Col1, 
     T1.Col2, 
     T1.Col3, 
     T1.Col4, 
     MAX(T1.TOTAL_col5) 
FROM 
    ( 
    SELECT 
    Col1, 
    Col2, 
    col3, 
    col4, 
    SUM(col5) AS TOTAL_col5 
FROM table1 
WHERE (((Col1)=variable1) AND ((col3)="variable2")) 
GROUP BY  
    Col1, 
    Col2, 
    col3, 
    col4 
ORDER BY 
    col4, 
    SUM(col5) AS TOTAL_col5 DESC 

    ) AS T1 
GROUP BY  
     T1.Col1, 
     T1.Col2, 
     T1.Col3, 
     T1.Col14 

ответ

1

Я не совсем понимаю, о чем вы спрашиваете «как получить наибольшую строку в каждой группе».

В приведенном ниже SQL, внутренний запрос возвращает таблицу T1, который суммирует col5 для каждой комбинации перевалы 1 до 4.

Внешний запрос найти самый высокий SUMof col5 для каждого COL4.

Я думаю, что это то, о чем вы просите, но пока вы не уточните вопрос, я больше не могу помочь.

SELECT col4 
    , MAX(TOTAL_col5) 
FROM 
(
    SELECT 
     Col1, 
     Col2, 
     col3, 
     col4, 
     SUM(col5) AS TOTAL_col5 
    FROM table1 
    WHERE (((Col1)=variable1) AND ((col3)="variable2")) 
    GROUP BY  
     Col1, 
     Col2, 
     col3, 
     col4 
) AS T1 
GROUP BY col4 
) 
+0

Thanks HarveyFrench, отредактированный для более подробной информации. – RedRaven

+0

Внутренний запрос возвращает то, что вы просили! Он дает вам одну строку для каждой комбинации колонок с 1 по 4, у которой была сумма (что является единственной суммой для этой комбинации и, следовательно, является максимальным значением для этой комбинации. – HarveyFrench

Смежные вопросы