SQL:按不在select和group by子句中的字段对数据进行排序

时间:2014-07-31 10:20:42

标签: sql sorting

我有一个SQL查询。 加入两列。 我想通过子表的一列对我的搜索结果进行排序,该列既不在select子句中也不在group by中(因为我不能将它分组,并且不能将它包含在select中)。 有什么办法可以实现吗?

2 个答案:

答案 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;