2016-07-14 111 views
0

我有一個查詢:子查詢在MySQL組由

SELECT round(addTime/qty, 0) AS col1, 
     sum(qty) AS col2, 
     cId AS Id 
FROM MyTable 
WHERE qty > 0 
GROUP BY round(addTime/qty, 0), cId 
ORDER BY round(addTime/qty, 0) 

但是我有一個

SUM(CASE WHEN qty = 1 THEN 1 ELSE DATEDIFF(second,startTime,endTime) END)/qty, 0) 

更換ADDTIME當我這樣做:

SELECT round(SUM(case when qty = 1 then 1 else DATEDIFF(second,startTime,endTime) end)/qty, 0) AS col1, 
sum(qty) AS col2, 
cId 
FROM MyTable 
WHERE qty > 0 
GROUP BY round(SUM(case when qty = 1 then 1 else 
DATEDIFF(second,startTime,endTime) end)/qty, 0)/qty, 0), cId 
ORDER BY round(SUM(case when qty = 1 then 1 else DATEDIFF(second,startTime,endTime) end)/qty, 0)/qty, 0) 

我得到

Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause. 

我的想法是,我可以使用新的查詢作爲變量,然後在需要的地方使用它,但隨後我遇到了MySql語法的麻煩。

非常感謝提前!

回答

1
SELECT * 
FROM (
    SELECT 
     round(SUM(case when qty = 1 then 1 else DATEDIFF(second, startTime,endTime) end)/qty, 0) AS col1, 
     sum(qty) AS col2, 
     cId 
    FROM MyTable 
    WHERE qty > 0 
) AS t 
GROUP BY t.col1, t.cId 
ORDER BY t.col1 

而且我不知道,但是從MySQL DIFFTIME如果您DIFFTIME功能不同。

+0

很好的答案,但它返回一個錯誤,說我需要在GROUP BY中使用qty。 「列'qty'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。」雖然我在GROUP BY中使用GROUP BY t1.col1 – RVstack

+0

@RVstack你確定你在使用MySQL嗎? –

+0

是的。我得到它的工作。我在查詢中輸入了一個類型。感謝幫助! – RVstack