Is it possible to use Aggregate function in a Select statment without using Group By clause?

前端 未结 7 1437
-上瘾入骨i
-上瘾入骨i 2020-12-14 18:04

So far I have written Aggregate function followed by Group By clause to find the values based on SUM, AVG and other Aggregate functions. I have a bit confusion in the Group

相关标签:
7条回答
  • 2020-12-14 18:39

    The Columns which are not present in the Aggregate function should come on group by clause:

    Select 
    Min(col1), 
    Avg(col2), 
    sum(col3) 
    from table
    

    then we do not required group by clause, But if there is some column which are not present in the Aggregate function then you must use group by for that column.

    Select 
    col1, 
    col2, 
    sum(col3) 
    from  table 
    group by col1,col2
    

    then we have to use the group by for the column col1 and col2

    0 讨论(0)
  • 2020-12-14 18:42

    You can use Select AGG() OVER() in TSQL

    SELECT *,
    SUM(Value) OVER()
    FROM Table
    

    There are other options for Over such as Partition By if you want to group:

    SELECT *,
    SUM(Value) OVER(PARTITION By ParentId)
    FROM Table
    

    http://msdn.microsoft.com/en-us/library/ms189461.aspx

    0 讨论(0)
  • 2020-12-14 18:44

    You must group by columns that do not have aggregate functions on them.

    You may avoid a group by clause if all columns selected have aggregate functions applied.

    0 讨论(0)
  • 2020-12-14 18:48

    Yes you can use an aggregate without GROUP BY:

    SELECT SUM(col) FROM tbl;
    

    This will return one row only - the sum of the column "col" for all rows in tbl (excluding nulls).

    0 讨论(0)
  • 2020-12-14 18:49

    Yes, without aggregate functions we can use group by column but it will be a distinct function.

    select <column name> from <table name> group by <column name> 
    

    Given the table EMP:

    select * from EMP
    

    That outputs:

    7369    SMITH   CLERK       7902
    7499    ALLEN   SALESMAN    7698
    7521    WARD    SALESMAN    7698
    7566    JONES   MANAGER     7839
    

    Adding a group by

    select job from EMP group by job
    

    Outputs:

    CLERK
    SALESMAN
    MANAGER
    
    0 讨论(0)
  • 2020-12-14 18:50

    All columns in the SELECT clause that do not have an aggregate need to be in the GROUP BY

    Good:

    SELECT col1, col2, col3, MAX(col4)
    ...
    GROUP BY col1, col2, col3
    

    Also good:

    SELECT col1, col2, col3, MAX(col4)
    ...
    GROUP BY col1, col2, col3, col5, col6
    

    No other columns = no GROUP BY needed

    SELECT MAX(col4)
    ...
    

    Won't work:

    SELECT col1, col2, col3, MAX(col4)
    ...
    GROUP BY col1, col2
    

    Pointless:

    SELECT col1, col2, col3, MAX(col4)
    ...
    GROUP BY col1, col2, col3, MAX(col4)
    

    Having an aggregate (MAX etc) with other columns without a GROUP BY makes no sense because the query becomes ambiguous.

    0 讨论(0)
提交回复
热议问题