oracle 通过返回多于一行的相同值来分组
oracle group by returning more that one row of the same values
我的查询使用分组依据返回相同的值。任何人都可以向我解释为什么会这样或者我做错了什么。
查询:
SELECT ID, LAST_DAY(EXPDATE) EXPDATE, SUM(BASEUNITS) AS BASEUNITS, SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY ID, EXPDATE
结果:
ID EXPDATE BASEUNITS BONUSUNITS
10 2016/04/30 12:00:00 AM 8560 0
10 2016/04/30 12:00:00 AM 8560 0
尽管这是不可能的,因为主键不可能实现 Oracle 冗余。但是当你得到这个时,你可以在 Id
之前使用 distinct
SELECT Distinct ID, LAST_DAY(EXPDATE) EXPDATE, SUM(BASEUNITS) AS BASEUNITS, SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY EXPDATE
您正在使用 Last_day() 函数,它不是聚合函数,因此在 groupby 中您应该指定用于分组的函数
SELECT ID,
LAST_DAY(EXPDATE) EXPDATE,
SUM(BASEUNITS) AS BASEUNITS,
SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY ID, Last_Day(EXPDATE)
我的查询使用分组依据返回相同的值。任何人都可以向我解释为什么会这样或者我做错了什么。
查询:
SELECT ID, LAST_DAY(EXPDATE) EXPDATE, SUM(BASEUNITS) AS BASEUNITS, SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY ID, EXPDATE
结果:
ID EXPDATE BASEUNITS BONUSUNITS
10 2016/04/30 12:00:00 AM 8560 0
10 2016/04/30 12:00:00 AM 8560 0
尽管这是不可能的,因为主键不可能实现 Oracle 冗余。但是当你得到这个时,你可以在 Id
之前使用 distinctSELECT Distinct ID, LAST_DAY(EXPDATE) EXPDATE, SUM(BASEUNITS) AS BASEUNITS, SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY EXPDATE
您正在使用 Last_day() 函数,它不是聚合函数,因此在 groupby 中您应该指定用于分组的函数
SELECT ID,
LAST_DAY(EXPDATE) EXPDATE,
SUM(BASEUNITS) AS BASEUNITS,
SUM(BONUSUNITS) AS BONUSUNITS
FROM TABLE
WHERE ID= '10'
GROUP BY ID, Last_Day(EXPDATE)