Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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查询返回不同列的唯一值的最大值_Sql_Max - Fatal编程技术网

单个SQL查询返回不同列的唯一值的最大值

单个SQL查询返回不同列的唯一值的最大值,sql,max,Sql,Max,我正在尝试为每个唯一的galaxyId列值检索maximum stellarMass属性。让我把它分解一下 首先,下面的查询返回我对列表中每个DES.galaxyId感兴趣的相关对象的ID和星体的列表 SELECT DES.galaxyId as descID, PROG.galaxyId as progID, PROG.stellarMass as progStellarMass FROM Guo2010a..mMR PROG, Guo2010a..mMR DES WHERE DE

我正在尝试为每个唯一的galaxyId列值检索maximum stellarMass属性。让我把它分解一下

首先,下面的查询返回我对列表中每个DES.galaxyId感兴趣的相关对象的ID和星体的列表

SELECT DES.galaxyId as descID,
   PROG.galaxyId as progID,
   PROG.stellarMass as progStellarMass
FROM Guo2010a..mMR PROG, Guo2010a..mMR DES
WHERE DES.galaxyId in (0,2,5) 
   AND PROG.galaxyId BETWEEN DES.galaxyId AND DES.lastprogenitorId
   AND PROG.snapnum = 48
这将返回表单的一个表

-------------------------------------------------
|   descID   |   progID   |   progStellarMass   |
-------------------------------------------------
|   0        |   34       |   8.3345            |
|   0        |   38       |   18.3345           |
|   2        |   198      |   80.3345           |
|   5        |   99       |   6.3345            |
|   5        |   8        |   3.3345            |
-------------------------------------------------
因此,对于(0,2,5…)中的每个DES.galaxyId/descID,可以返回多个结果我想做的是,从这个结果中,为每个唯一的descID选择带有max(progStellarMass)的结果。我需要在一个查询中完成此操作。

因此,我想要返回下表:

----------------------------------------------------
|   descID   |   progID   |   MAXprogStellarMass   |
----------------------------------------------------
|   0        |   38       |   18.3345              |
|   2        |   198      |   80.3345              |
|   5        |   99       |   6.3345               |
----------------------------------------------------

任何帮助都将不胜感激。我之所以要提出一个新问题,是因为我首先运行这个额外的查询来获取需要处理的数据表

我有一个可能不是最好的解决方案,但至少它应该可以工作(实际上没有运行它)。小心使用子查询,仔细检查解释

SELECT t1.descID, PROG.galaxyId as progID, MAXprogStellarMass 
FROM Guo2010a..mMR PROG, Guo2010a..mMR DES
INNER JOIN 
(SELECT DES.galaxyId as descID,
   max(PROG.stellarMass) as MAXprogStellarMass
FROM Guo2010a..mMR PROG, Guo2010a..mMR DES
WHERE DES.galaxyId in (0,2,5) 
   AND PROG.galaxyId BETWEEN DES.galaxyId AND DES.lastprogenitorId
   AND PROG.snapnum = 48 
GROUP BY DES.galaxyId ) as t1
ON (t1.descID = DES.galaxyId)
WHERE MAXprogStellarMass = PROG.stellarMass
提示:有一种方法可以“强制”子查询始终在主查询之前运行。它是通过在子查询周围附加select*from()来完成的


你是否尝试过将
MAX(PROG.galaxyId)作为progID
?@JohnPriestakos-我不想要最大的galaxyId。与
MAX(PROG.stellarMass)作为MaxprogStellarMass
@JohnPriestakos-这只返回一个结果相同。我希望从(0,2,5…)中的每个描述中得到一个结果。一旦我将
ORDER BY PROG.galaxyId DESC
更改为
ORDER BY PROG.stellarMass DESC
此查询就完成了!当你留下这个答案时,我突然意识到OP实际上并没有指明他使用的是什么SQL…我假设MYSQL是多么愚蠢…谢谢Sumon@JackyCheng-这是什么意思?@CarlM我相信分区之类的东西在MYSQL中不起作用,只有在oracle中才起作用?@JackyCheng-啊,我明白了。我用的这个系统很奇怪。例如,它不允许我使用LIMIT关键字。抱歉没有在我的帖子中指定类型。如果您愿意,请对这个答案进行投票。这会返回正确的行,但也会返回包含错误信息的额外行。我不知道为什么。谢谢你的回答!
select a,b from (select * from (select a,b from table1 where requirement = "matched") as t1) as t2) where a > b;
SELECT descID,progID,progStellarMass
FROM
(
    SELECT RANK() OVER (PARTITION BY DES.galaxyId  ORDER BY PROG.stellarMass DESC) AS RankID, DES.galaxyId as descID,
       PROG.galaxyId as progID,
       PROG.stellarMass as progStellarMass
    FROM Guo2010a..mMR PROG, Guo2010a..mMR DES
    WHERE DES.galaxyId in (0,2,5) 
       AND PROG.galaxyId BETWEEN DES.galaxyId AND DES.lastprogenitorId
       AND PROG.snapnum = 48
) AS WRAP
WHERE RankID = 1