当一个字段不能分组时,如何在SQL中使用select MIN()?
我是SQL新手,所以请温柔一点。我试图寻找答案,但什么也找不到 我在表格中有以下数据当一个字段不能分组时,如何在SQL中使用select MIN()?,sql,min,Sql,Min,我是SQL新手,所以请温柔一点。我试图寻找答案,但什么也找不到 我在表格中有以下数据 Code Area Department Level Name HWNET Highways Network Services 2 Bob Jones HWNET Highways Network Services 1 Jim Smith HWTRA Highways Traffic Service
Code Area Department Level Name
HWNET Highways Network Services 2 Bob Jones
HWNET Highways Network Services 1 Jim Smith
HWTRA Highways Traffic Services 2 Andy Johnson
HWTRA Highways Traffic Services 1 David Turner
我想从表中选择所有列,但只选择每个级别的最小值。我的问题是我需要知道名称,但这阻止了我使用GROUPBY函数
如果我使用它,它会返回表中的每一行
SELECT Code, Area, Department,MIN(Level) Level , Name
FROM TABLE_NAME
GROUP BY Code, Area,Department, Name
这将返回正确的行,但不包含名称
SELECT Code, Area, Department,MIN(Level) Level
FROM TABLE_NAME
GROUP BY Code, Area,Department
有没有办法让我带回这组结果
Code Area Department Level Name
HWNET Highways Network Services 1 Jim Smith
HWTRA Highways Traffic Services 1 David Turner
谢谢是预付款您可以尝试以下方式
select t.*
from TABLE_NAME t
inner join
(
SELECT Code, Area, Department,MIN(Level) mLevel
FROM TABLE_NAME
GROUP BY Code, Area,Department
) x on x.Code = t.code
and x.Area = t.area
and x.Department = t.Department
and x.mLevel = t.level
SELECT Code, Area, Department, Level, Name
FROM (
SELECT Code, Area, Department, Level, Name, ROW_NUMBER() OVER (PARTITION BY Code, Area, Department, Name ORDER BY Level) __RN
FROM TABLE_NAME) subQuery
WHERE __RN = 1
如果不了解更多关于表的模式的信息,就很难说出将数据的分组版本连接到表的最佳方式。使用ROW_NUMBER()可能效率更高,但您可以根据表中的唯一键来减少分区中的元素
SELECT Code, Area, Department, Level, Name
FROM (
SELECT Code, Area, Department, Level, Name, ROW_NUMBER() OVER (PARTITION BY Code, Area, Department, Name ORDER BY Level) __RN
FROM TABLE_NAME) subQuery
WHERE __RN = 1
如果不了解更多关于表的模式的信息,就很难说出将数据的分组版本连接到表的最佳方式。使用ROW_NUMBER()可能效率更高,但您可以根据表中的唯一键来减少分区中的元素。通常我是这样做的:
select *
from TABLE_NAME
where (Department,
Level) in (select Department,
min(Level)
from TABLE_NAME
group by Department)
这里有一个
根据您的数据,我只使用了Department和Level,但是如果您还需要使用Code和Area来标识正确的行,只需在WHERE子句和子查询的SELECT中对它们进行排序即可
select *
from TABLE_NAME
where (Code,
Area
Department,
Level) in (select Code,
Area,
Department,
min(Level)
from TABLE_NAME
group by Code,
Area,
Department)
通常我是这样做的:
select *
from TABLE_NAME
where (Department,
Level) in (select Department,
min(Level)
from TABLE_NAME
group by Department)
这里有一个
根据您的数据,我只使用了Department和Level,但是如果您还需要使用Code和Area来标识正确的行,只需在WHERE子句和子查询的SELECT中对它们进行排序即可
select *
from TABLE_NAME
where (Code,
Area
Department,
Level) in (select Code,
Area,
Department,
min(Level)
from TABLE_NAME
group by Code,
Area,
Department)
你非常喜欢juergen d。工作得很有魅力!你非常喜欢juergen d。工作得很有魅力!非常感谢您抽出时间来协助。我尝试了上面juergen d的解决方案,效果很好。但再次感谢您抽出时间提供帮助。仅供参考,此解决方案适用于MySQL或类似产品。非常感谢您抽出时间提供帮助。我尝试了上面juergen d的解决方案,效果很好。但再次感谢您抽出时间提供帮助。仅供参考,此解决方案适用于MySQL或类似产品。非常感谢您抽出时间提供帮助。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我,非常感谢你抽出时间来帮助我。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我,非常感谢你抽出时间来帮助我。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我,非常感谢你抽出时间来帮助我。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我,非常感谢你抽出时间来帮助我。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我,非常感谢你抽出时间来帮助我。我尝试了上面juergen d的解决方案,效果很好。但再次感谢你抽出时间来帮助我。