假设我有一个像这样的行的数据库
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构建这样的查询?它是否可能,或者我是否需要在应用程序代码中进行此过滤?
答案 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))
- 聚合函数来查找多个名称的最小长度;稍微有点棘手的是将相应的ID
和NAME
添加到结果中。以下查询应该有效:
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