如果另一列中有重复项,请在一列中选择最短字符串的行?

时间:2017-06-12 08:26:02

标签: sql sqlite

假设我有一个像这样的行的数据库

ID  PNR     NAME
1   35      Television
2   35      Television, flat screen
3   35      Television, CRT
4   87      Hat
5   99      Cup
6   99      Cup, small      

我想选择每种类型的项目(电视,帽子,杯子) - 但是对于PNR中有多个条目的项目,我只想选择NAME最短的项目。所以结果集是

ID  PNR     NAME
1   35      Television
4   87      Hat
5   99      Cup

我如何使用SQLite构建这样的查询?它是否可能,或者我是否需要在应用程序代码中进行此过滤?

2 个答案:

答案 0 :(得分:2)

自SQLite 3.7.11起,您可以use MIN() or MAX() to select a row in a group

SELECT ID,
       PNR,
       Name,
       min(length(Name))
FROM MyTable
GROUP BY PNR;

答案 1 :(得分:0)

您可以使用MIN(length(name)) - 聚合函数来查找多个名称的最小长度;稍微有点棘手的是将相应的IDNAME添加到结果中。以下查询应该有效:

select mt1.ID, mt1.PNR, mt1.Name
from MyTable mt1 inner join (
  select pnr, min(length(Name)) as minlength
  from MyTable group by pnr) mt2
  on mt1.pnr = mt2.pnr and length(mt1.Name) = mt2.minlength