Error with having clause

后端 未结 3 1136
抹茶落季
抹茶落季 2021-01-17 20:08
select SUM (Bill) from ProductSaleReport group by PCI 
having MONTH(Date) between 1 and 3

Could any one please help me finding the issue.?

<
相关标签:
3条回答
  • 2021-01-17 20:51

    Use WHERE to filter before group by

    HAVING is used to filter data after the group by occurs

    select SUM (Bill) -- comment: you need to add the PCI column since you use it in the group by right?
    from ProductSaleReport 
    WHERE MONTH(Date) between 1 and 3
    group by PCI 
    
    0 讨论(0)
  • 2021-01-17 21:06

    MONTH(Date) is not a column you're grouped by, so it can't appear in having clause. You can do like that:

    select SUM (Bill) 
    from ProductSaleReport
    where MONTH(Date) between 1 and 3
    group by PCI 
    

    Other way is

    select SUM (Bill) 
    from ProductSaleReport 
    group by PCI, MONTH(Date) 
    having MONTH(Date) between 1 and 3
    

    but keep in mind that you will get result grouped by month as well as by PCI.

    The difference between WHERE and HAVING explained here: Using 'case expression column' in where clause

    0 讨论(0)
  • 2021-01-17 21:10

    MONTH(Date) is not a column you SELECTed, so it can't appear in your HAVING clause.

    If you meant to only SUM the Bills from rows where the month is between 1 and 3, then that is a WHERE clause, not a HAVING clause.

    If all the rows in each PCI group have the same MONTH(Date), then you can add MONTH(Date) to your SELECT clause in order to use it in the HAVING clause.

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