繁体   English   中英

具有最大列的行的子选择

[英]Sub select of row that has max column

我正在尝试做听起来很简单的事情,但与此同时我一直在做一些转弯。

我有一个存储过程,当前只能按要求工作,只缺少一点点功能,以返回对应于最大计算的名称...

所以我回来

平均计算和最大值计算,但要返回“另一列的名称”作为最大值。

这是我的SP的一个示例,很抱歉,由于我不得不重命名和忽略不相关的位,因此似乎不太自然,因此可能有些人为:

SELECT  
    IFNULL(ROUND(AVG(TABLE1.TotalCapacityPercentageUsage / TABLE1.TotalSnapshotsForTimeSegment), 2), 0.0) AS TotalAvgCapacityPercentageUsage,
    IFNULL(ROUND(MAX(TABLE1.MaxCapacityPercentageUsage), 2), 0.0) AS TotalMaxCapacityPercentageUsage,
     -- TODO return the QueuesTmp.QueueName for max calculation (This could be more than one row, so I was going to use something like the following:
     -- (SELECT GROUP_CONCAT(QueuesTmp.QueueName SEPARATOR ' ') to ensure only one field is returned.. 

    FROM TABLE1
    INNER JOIN QueuesTmp ON QueuesTmp.QueueID = TABLE1.QueueID
    RIGHT JOIN TimesTmp ON TABLE1.TimeSegment = TimesTmp.QuarterHour AND
                           TABLE1.Date = DATE(TimesTmp.StartOfRangeUTC)
    GROUP BY TimesTmp.QuarterHour;

我首先进行了一次Sub select,但似乎然后我将不得不重复所有的Joins,WHERE和Group By(似乎这是不可能的,因为这就是这样做的目的)。

有人可以在正确的方向上指导我如何实现这一目标吗?

提前致谢。

解决方案

GROUP_CONCAT(DISTINCT QueuesTmp.QueueName ORDER BY MYCOLUMN DESC SEPARATOR':')AS MaxColumnQueueName,

我不确定自己的方法正确。 您需要使用max-计算该行的QueueName 因此,将group_concat与该计算的ORDER BY一起使用,并通过SUBSTRING_INDEX来获得此列表的第一个元素。

substring_index(
    GROUP_CONCAT(DISTINCT QueuesTmp.QueueName ORDER BY `maxCalculation` DESC) SEPARATOR ':',
    ':',
    1
)

附加问题。 抱歉,最大评论空间已到。 在这里查询。 我以您的示例为例-查询sub并选择queueId作为逗号分隔的列表,并选择max(maxColumn)作为附加列表。 之后,我再次使用queueId和maxColumn加入队列表。 我不能保证是否可行。

SELECT 
    sub.TotalAvgCapacityPercentageUsage,
    sub.TotalMaxCapacityPercentageUsage,
    GROUP_CONCAT(DISTINCT QueuesTmp.QueueName ORDER BY MYCOLUMN DESC SEPARATOR ':') AS MaxColumnQueueName
FROM(
    SELECT  
        TimesTmp.QuarterHour,
        IFNULL(
            ROUND(
                AVG(
                    TABLE1.TotalCapacityPercentageUsage / 
                    TABLE1.TotalSnapshotsForTimeSegment
                ), 
                2
            ), 
            0.0
        ) AS TotalAvgCapacityPercentageUsage,
        IFNULL(
            ROUND(
                MAX(TABLE1.MaxCapacityPercentageUsage), 
                2
            ), 
            0.0
       ) AS TotalMaxCapacityPercentageUsage,
       max(QueuesTmp.maxColumn) AS maxColumn,
       group_concat(DISTINCT QueueID) AS QueueID
    FROM TABLE1
    INNER JOIN QueuesTmp 
        ON QueuesTmp.QueueID = TABLE1.QueueID
    RIGHT JOIN TimesTmp 
        ON TABLE1.TimeSegment = TimesTmp.QuarterHour 
        AND TABLE1.Date = DATE(TimesTmp.StartOfRangeUTC)
    GROUP BY TimesTmp.QuarterHour
) AS sub
LEFT JOIN QueuesTmp 
    ON QueuesTmp.QueueID IN(sub.QueueID)
    AND QueuesTmp.maxColumn = sub.maxColumn

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM