Hi<br><br>I asked the following question at gis.stackexchange.com, but had no luck so far. Can any of you guys help?<br><br>Ian<br><br><a href="http://gis.stackexchange.com/questions/24941/using-group-by-to-set-a-postgis-datasource-using-qgis-python-api">http://gis.stackexchange.com/questions/24941/using-group-by-to-set-a-postgis-datasource-using-qgis-python-api</a><br><br><div class="post-text" itemprop="description">         <p>I am writing a QGIS Plugin and wish to obtain data from a  PostGIS table using the Group By clause using something like the  following code: </p>  <pre class="lang-py prettyprint"><code><span class="pln">uri </span><span class="pun">=</span><span class="pln"> </span><span class="typ">QgsDataSourceURI</span><span class="pun">()</span><span class="pln"><br>uri</span><span class="pun">.</span><span class="pln">setConnection</span><span class="pun">(</span><span class="str">'localhost'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'5432'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'postgis'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'postgres'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'xxx'</span><span class="pun">)</span><span class="pln"><br></span><span class="typ">Query</span><span class="pun">=</span><span class="str">"select param_id, st_union(the_geom) as the_geom from myTable group by param_id"</span><span class="pln"><br>uri</span><span class="pun">.</span><span class="pln">setDataSource</span><span class="pun">(</span><span class="str">''</span><span class="pun">,</span><span class="pln"> </span><span class="str">'(%s)'</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> postGisQuery</span><span class="pun">,</span><span class="pln"> </span><span class="str">"the_geom"</span><span class="pun">,</span><span class="str">''</span><span class="pun">,</span><span class="str">'gid'</span><span class="pun">)</span><span class="pln"><br>vlayer1 </span><span class="pun">=</span><span class="pln"> </span><span class="typ">QgsVectorLayer</span><span class="pun">(</span><span class="pln">uri</span><span class="pun">.</span><span class="pln">uri</span><span class="pun">(),</span><span class="pln"> </span><span class="str">'testlayer1'</span><span class="pun">,</span><span class="pln"> </span><span class="str">"postgres"</span><span class="pun">)</span><span class="pln"> <br></span></code></pre>  <p>This gives the error "No key field for query given." because it is  looking for the gid key field. But if gid was put in the select  statement of the Query, we won't get aggregated rows, just distinct  rows. If I try an aggregation function on gid, I get the same error. If I  try aliasing the aggregate, I get an "Erroneous query" error (even <code>count(gid) as gid</code>), same as if I put 'param_id' as the key field in setDataSource, because 'param_id' is not a primary key, I guess. </p>  <p>In this case, forcing the key field in the uri seems to make the  group by clause useless. Is there another workaround I haven't thought  of or is this the expected behaviour?</p>      </div><br><br>