如何选择多个列,但只在Hypersql数据库(HSQLDB)中按一列分组?

时间:2016-02-05 15:21:25

标签: java mysql hsqldb hypersql

我正在使用HSQLDB-2.3.3版本, 这里我展示了一个简单的MySQL查询。

示例:

SELECT name,age,emailid,country FROM players GROUP BY country;

但如果我在HyperSQL中执行相同的查询,则会显示错误, "Expression not in aggregate or group by columns PUBLIC.PLAYERS.NAME"

如果我将组应用于我使用select语句选择的每一列,它会显示所有列聚合的结果。

我的问题是,如何在GROUP BY中显示一列聚合(HyperSQL)的多列?

Players

pid name emailid country region age

1 Samual Samual@gmail.com INDIA DELHI 25

2 Vino Vino@gmail.com INDIA DELHI 20

3 John John@gmail.com INDIA DELHI 20

4 Andy Andy@gmail.com INDIA DELHI 22

5 Brian Brian@hotmail.com America DELHI 21

6 Dew Dew@hotmail.com America DELHI 24

7 Kris Kris@hotmail.com America DELHI 25

8 William William@hotmail.com INDIA DELHI 26

9 George George@hotmail.com INDIA DELHI 23

10 Peter Peter@gmail.com INDIA DELHI 19

11 Tom Tom@gmail.com America DELHI 20

12 Andre Andre@hotmail.com INDIA DELHI 20

预期Result

name age emailid country

Brian 21 Brian@hotmail.com America

Samual 25 Samual@gmail.com INDIA

1 个答案:

答案 0 :(得分:0)

MySQL中GORUP BY的实现与遵循SQL Standard的其他数据库不同。在这种情况下,查询不应该起作用。

您期望的结果包含每个国家/地区pid最低的人。您可以编写明确要求的查询:

SELECT name, age, emailid, country FROM players 
    WHERE pid IN (SELECT MIN(pid) FROM players GROUP BY country)

查询首先找到每个国家/地区的最低pid。然后,它会选择包含这些pid值的两行。