我有一个SQL查询。 加入两列。 我想通过子表的一列对我的搜索结果进行排序,该列既不在select子句中也不在group by中(因为我不能将它分组,并且不能将它包含在select中)。 有什么办法可以实现吗?
答案 0 :(得分:0)
在 SQL Server 中,会导致错误
Column "test2.DATE" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.:
在这里小提琴:http://sqlfiddle.com/#!6/d3d28/1
在 Oracle 中,会导致错误
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
With test2 as
(
SELECT 1 ID, 'Hari' fName,30 KEYID ,sysdate DATEE FROM DUAL UNION ALL
SELECT 1, 'Hari' ,20 , sysdate FROM DUAL UNION ALL
SELECT 2, 'John' ,55, sysdate FROM DUAL UNION ALL
SELECT 2, 'John' ,89, sysdate FROM DUAL UNION ALL
SELECT 2, 'John' ,38, sysdate FROM DUAL
)
select id, fname, sum(keyid) from test2
group by id, fname
order by dateE desc;
因此,在oracle中,建议在select子句中包含child-table列。在显示UI逻辑/结果集处理逻辑中,您可以考虑忽略该列。
答案 1 :(得分:0)
按照要删除重复项的字段进行排序实际上没有意义,因为删除的某些值可能会影响排序顺序。仅使用上面的Hari和John的例子,想象一下这个数据:
1, 'Hari', 4
1, 'Hari', 6
2, 'John', 5
2, 'John', 7
2, 'John', 8
如果你想要对Hari然后约翰进行排序,因为Hari具有最低的排序字段而John具有次低的排序(即为了排序,你忽略排序字段值6,7和8)然后按顺序排序分钟(的SortField)
再次,使用Nishanthi的例子,查询会变成这样:
select id, fname, sum(keyid) from test2
group by id, fname
order by Min(dateE) desc;