diff --git a/.travis.yml b/.travis.yml
index d917e813..f513239e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,6 +4,7 @@ language: ruby
 rvm:
   - 2.0
   - 2.2.3
+  - 2.3.0
   - jruby-head
 
 gemfile:
diff --git a/lib/closure_tree/finders.rb b/lib/closure_tree/finders.rb
index 3e0a69dd..866b138f 100644
--- a/lib/closure_tree/finders.rb
+++ b/lib/closure_tree/finders.rb
@@ -39,7 +39,7 @@ def find_all_by_generation(generation_level)
           SELECT descendant_id
           FROM #{_ct.quoted_hierarchy_table_name}
           WHERE ancestor_id = #{_ct.quote(self.id)}
-          GROUP BY 1
+          GROUP BY descendant_id
           HAVING MAX(#{_ct.quoted_hierarchy_table_name}.generations) = #{generation_level.to_i}
         ) AS descendants ON (#{_ct.quoted_table_name}.#{_ct.base_class.primary_key} = descendants.descendant_id)
       SQL
@@ -74,7 +74,7 @@ def leaves
           INNER JOIN (
             SELECT ancestor_id
             FROM #{_ct.quoted_hierarchy_table_name}
-            GROUP BY 1
+            GROUP BY ancestor_id
             HAVING MAX(#{_ct.quoted_hierarchy_table_name}.generations) = 0
           ) AS leaves ON (#{_ct.quoted_table_name}.#{primary_key} = leaves.ancestor_id)
         SQL
@@ -100,7 +100,7 @@ def find_all_by_generation(generation_level)
           INNER JOIN (
             SELECT ancestor_id, descendant_id
             FROM #{_ct.quoted_hierarchy_table_name}
-            GROUP BY 1, 2
+            GROUP BY ancestor_id, descendant_id
             HAVING MAX(generations) = #{generation_level.to_i}
           ) AS descendants ON (
             #{_ct.quoted_table_name}.#{primary_key} = descendants.descendant_id
diff --git a/lib/closure_tree/numeric_deterministic_ordering.rb b/lib/closure_tree/numeric_deterministic_ordering.rb
index 2008ed22..0e2e0edb 100644
--- a/lib/closure_tree/numeric_deterministic_ordering.rb
+++ b/lib/closure_tree/numeric_deterministic_ordering.rb
@@ -72,7 +72,7 @@ def roots_and_descendants_preordered
           JOIN (
             SELECT descendant_id, max(generations) AS max_depth
             FROM #{_ct.quoted_hierarchy_table_name}
-            GROUP BY 1
+            GROUP BY descendant_id
           ) AS depths ON depths.descendant_id = anc.#{_ct.quoted_id_column_name}
         SQL
         joins(join_sql)