H2 DB - Column must be in Group By list

15,928

MySQL is broken in regards to this. It allows columns in the GROUP BY that are neither in the group by nor arguments to aggregation functions. In fact, the documentation warns against using this extension.

So you can do:

SELECT state
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

Or something like this:

SELECT state, min(city), min(lat), . . .
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

But SELECT * is not allowed and doesn't really make sense.

Share:
15,928
metinkale38
Author by

metinkale38

Updated on July 26, 2022

Comments

  • metinkale38
    metinkale38 almost 2 years

    i am using H2-DB to access static databases...

    i have a table which looks like:

    COUNTRY     STATE       CITY         LAT     LNG     COUNTRYID      STATEID     CITYID 
    "Germany"   "Berlin"    ""           1.23    1.23    1              1           0
    "Germany"   "München"   ""           1.23    1.23    1              2           0
    "USA"       "Alabama"   "Auburn"     1.23    1.23    2              1           1
    "USA"       "Alabama"   "Birmingham" 1.23    1.23    2              1           2
    "USA"       "Alaska"    "Anchorage"  1.23    1.23    2              2           1
    "USA"       "Alaska"    "Cordova"    1.23    1.23    2              2           2
    

    its a huge list with lots of countries, most of them just have Country and State (like Germany here, whereas State's are Cities), a few also have a City (like USA here)...

    the problem is now, when i query

    SELECT * FROM MyTable WHERE COUNTRY = 'Germany' group by STATE order by STATE
    

    to get a sorted list of the states (or cities), i get an error saying

    Field CITY must be in the GROUP BY list
    

    if the row has a city, i need the whole row, otherwise i would only need the State column, but i can just know after having queried it, wether it uses the city column or not, so i have to query "*" instead of "STATE"

    the query should be okay, or? On MySql it is properly working... so whats the problem here?

    Found this if it helps: http://www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016

    Metin

    • wero
      wero almost 9 years
      do you mean SELECT STATE, CITY FROM DIYANET WHERE COUNTRY = 'Germany' ORDER BY STATE, CITY
    • Gordon Linoff
      Gordon Linoff almost 9 years
      Please edit your question with your desired results.
    • metinkale38
      metinkale38 almost 9 years
      If there is a city, I need "*" (would work, if there wouldn't be multiple empty city columns), if city is empty I do only need state... On mysql it is no problem, if there are multiple of one column (here they are always empty), it just gives one, I haven't to add that to group by...
  • metinkale38
    metinkale38 almost 9 years
    Even if it nonsense, I need it :) but thank you, now I know the problem, why it is working on mysql and not on h2...I will add one query more, to fix it :)...