sqlite - 在sqlite中使用group by时选择某行的rowid

标签 sqlite group-by

我在 SQLite 中有一个查询,我按某个列分组,并在 select 语句的另一列上使用聚合函数 MAX。现在我还想要包含 MAX 聚合显示的值的行的 rowid。我知道由于主键约束,这必须是唯一的行。我不知道如何编写查询。请参阅以下示例:

create table t1 (c1, c2, constraint t1_pk primary key (c1, c2));

insert into t1 values ('boys', 1);
insert into t1 values ('boys', 2);
insert into t1 values ('girls', 1);
insert into t1 values ('girls', 2);

现在我的表在两列上都有主要约束。对该表的 SELECT 查询给出以下输出:
sqlite> select rowid, * from t1;

rowid|c1|c2
1|boys|1
2|boys|2
3|girls|1
4|girls|2

现在我想按 c1 分组并选择 c2 的 MAX。然后我想要保存现在显示的值的行的 rowid。请参阅以下查询:
sqlite> select rowid, c1, max(c2) from t1 group by c1;

rowid|c1|max(c2)
2|boys|2
4|girls|2

sqlite> select rowid, c1, min(c2) from t1 group by c1;

rowid|c1|min(c2)
2|boys|1
4|girls|1

带有 MIN 聚合的第二个查询应该返回包含 MIN 值的行的 rowids,这就是我想要实现的:
rowid|c1|min(c2)
1|boys|1
3|girls|1

现在我尝试了以下子选择,它也不起作用,因为它给出了错误:
sqlite> select (select rowid from t1 b where b.c1 = a.c1 and b.c2 = max(a.c2)), a.c1, max(a.c2) from t1 a group by a.c1;

Error: misuse of aggregate function max()

sqlite> select (select rowid from t1 b where b.c1 = a.c1 and b.c2 = min(a.c2)), a.c1, min(a.c2) from t1 a group by a.c1;

Error: misuse of aggregate function min()

我尝试过的最后一件事是 FROM 子句中的子查询,它也不起作用:
sqlite> select
   ...>         (select rowid from t1 b where b.c1 = c.c1 and b.c2 = c.c2),
   ...>         c1,
   ...>         c2
   ...> from
   ...>         (select a.c1, max(a.c2) as c2 from t1 a group by a.c1) c;

Error: misuse of aggregate: max()

sqlite> select
   ...>         (select rowid from t1 b where b.c1 = c.c1 and b.c2 = max(c.c2)),
   ...>         c.c1,
   ...>         max(c.c2)
   ...> from
   ...>         (select a.c1, a.c2 from t1 a group by a.c1) c;

Error: misuse of aggregate function max()

我的问题有什么解决方案吗?我真的不知道我还能尝试什么。

最佳答案

如果我正确理解您的问题,请尝试这样:

select rowid, c1, min(c2) from t1 a
where c2=(select min(c2) from t1 b where b.c1=a.c1) 
group by rowid,c1;

检查 FIDDLE

关于sqlite - 在sqlite中使用group by时选择某行的rowid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12385860/

相关文章:

mysql - 按城市名称分组,第一行只显示一次相同的城市名称

Android SQLite rawQuery 带来麻烦

database - 我的 Win JS SQLite 3 应用程序需要太多时间来进行插入

sql - 理解内部查询的总结

android - 从 sqlite 中删除不起作用

c# - 使用 GroupBy 通过重叠范围对集合进行分区

大文件路径的 Java JDBC 连接关闭异常

sql - 结合使用 string_agg 并在 postgres 中使用

mysql - 排序依据和分组依据

c# - LINQ 到 SQL : GroupBy() and Max() to get the object with latest date