2014-06-23 65 views
0

我試圖做一些事情,聽起來很簡單,但我一直轉圈圈一點與它行..子選擇具有最大列

我有一個目前是需要一個存儲過程只缺一個功能位,爲一corrosponding最大計算返回名稱...

所以我回到

平均計算& 最大的計算,但要「從另一列名」的最大回報值。

這裏是我的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; 

我開始做一個子選擇,但它似乎我將不得不重複所有的聯接,在哪裏和分組依據(似乎這是不可能的,因爲這就是爲什麼)..

任何人都可以指引我在正確的方向作爲如何實現這一目標?

在此先感謝。

工作液

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

回答

1

我不知道我是在正確的道路。您需要該行的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 
+0

您好,非常感謝您的回覆。我認爲這似乎很好。我不得不做一個小的改動,因爲它在語法上不是很正確,我也想返回所有匹配最大計算的隊列名稱,但似乎效果很好。我會發布我的工作示例作爲編輯我的問題..我可以請只是確認一些東西,但你。我只是在我的專欄中訂購的不是ORDER BY MAX(COLUMN)是否正確?此外,select還受到原始查詢正在執行的組的限制嗎?如果不是,看起來很奇怪。 – Yos

+0

沒問題,你可以按你想要的順序排列。我的例子是基於給定查詢中的評論。 感謝我的例子的語法提示,我糾正它。 – lopo

+0

嗨,對不起,我知道我已經接受了你的答案,但它沒有得到我所需要的。這是正確的方向。所以,現在按照它的最大值,它返回一個字符串,其隊列名稱按desc順序排列,非常棒!不過,我希望它只返回隊列(可能有多個),其最大值等於最大值。所以它幾乎就像我需要在我的group_concat中做一個WHERE只會返回我隊列中的最大值等於最大值的計算,例如WHC MaxColumn = MAX(MaxColumn)..我不能看到如何做到這一點,任何ideas.T – Yos

相關問題