Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个字段不能分组时,如何在SQL中使用select MIN()?_Sql_Min - Fatal编程技术网

当一个字段不能分组时,如何在SQL中使用select MIN()?

当一个字段不能分组时,如何在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

我是SQL新手,所以请温柔一点。我试图寻找答案,但什么也找不到

我在表格中有以下数据

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的解决方案,效果很好。但再次感谢你抽出时间来帮助我。