首页 > 解决方案 > SQL 查询 X 个不同的列值,所有行

问题描述

是否可以编写一个 SQL 查询,该查询将为我提供 X 个不同值的列,让我每行都保存该列值?

例如,假设我有以下 DocID 的行

1,
2,
3,
4,
5,
3

我想返回前 4 个不同的 DocID

因此我应该回去

1,
2,
3,
4,
3

我想要前 4 个不同的 DocID,在其中我得到包含每个 DocID 的每一行。

这样的查询可能吗?

编辑:这是为使用 MySQL 的客户准备的。此外,使用“order by”子句会导致数据库日志太大而导致错误。

谢谢

标签: sql

解决方案


这通常可以通过以下方式解决:

select t.*
from t
where t.docid in (select t2.docid
                  from t t2
                  group by t2.docid
                  order by t2.docid
                  fetch first 4 rows only
                 );

笔记:

  • 您没有指定如何选择“前 4 名”。这是基于数字排序。
  • 这使用group by而不是count distinct,因此排序可以基于其他内容(例如行数或行时间)。
  • fetch first 4 rows only是标准 SQL。一些数据库使用limitortop代替。

推荐阅读