Index: orm/query.py
===================================================================
--- orm/query.py	(revision 2525)
+++ orm/query.py	(working copy)
@@ -43,6 +43,8 @@
         self._offset = kwargs.pop('offset', None)
         self._limit = kwargs.pop('limit', None)
         self._criterion = None
+        self._col = None
+        self._func = None
         self._joinpoint = self.mapper
         self._from_obj = [self.table]
 
@@ -71,6 +73,8 @@
         q._from_obj = list(self._from_obj)
         q._joinpoint = self._joinpoint
         q._criterion = self._criterion
+        q._col = self._col
+        q._func = self._func
         return q
     
     def _get_session(self):
@@ -304,7 +308,6 @@
         """Given a ``WHERE`` criterion, create a ``SELECT`` statement,
         execute and return the resulting instances.
         """
-
         statement = self.compile(whereclause, **kwargs)
         return self._select_statement(statement, params=params)
 
@@ -597,6 +600,19 @@
             raise exceptions.InvalidRequestError("Can't locate property named '%s'" % key)
         return [keys, p]
 
+    def _generative_col_aggregate(self, col, func):
+        if self._col or self._func:
+            raise Exception('trying to override either the column or func')
+        q = self._clone()
+        q._col = col
+        q._func = func
+        return q
+
+    def sum_clause(self, col):
+        """Execute the SQL ``sum()`` function against the given column."""
+
+        return self._generative_col_aggregate(col, sql.func.sum)
+
     def _col_aggregate(self, col, func):
         """Execute ``func()`` function against the given column.
 
@@ -753,6 +769,12 @@
         """
 
         return list(self)
+
+    def scalar(self):
+        if self._col is None or self._func is None: 
+            return self[0]
+        else:
+            return self._col_aggregate(self._col, self._func)
     
     def __iter__(self):
         return iter(self.select_whereclause())
