2017-03-01 47 views
-1

當我想從表it_Service_ticket中獲取數據時。該錯誤是「具有條款」在加入條件我想使用group by和having子句但得到錯誤?如何使用group by和條款

如何使用由具有條件組和

未知列「it_service_ticket.xetr」?請幫我

SELECT Assignedto,COUNT(Assignedto) as TC 
,CONCAT(count(case when STATUS = 'CLOSE' then 1 else null end) * 100/count(1), '%') as SC 
,CONCAT(count(case when STATUS = 'PENDING' then 1 else null end) * 100/count(1), '%') as PC 
,SUM(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr))/60 as WH ,(540-sum(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr)))/60 as VH, 
COUNT(Feedback_Rate)/COUNT(Assignedto)*100 as Feed_Percent, 
SUM(Feedback_Rate)/(count(Feedback_Rate)*5)*5 as AVG_Feedback 
FROM `it_service_ticket` 
INNER JOIN `it_problem` 
ON `it_service_ticket`.`it_problem_id`=`it_problem`.`it_problem_id` 
INNER JOIN `city_master` 
ON `it_service_ticket`.cityid=`city_master`.city_id 

GROUP BY Assignedto 
HAVING `it_service_ticket`.`xetr` BETWEEN '2017-01-01 12:00:00 AM' AND '2017-03-31 12:00:00 PM' 
       ; 
+1

你說要通過使用組和有,怎麼來的? (因爲你不知道如何使用它們......) – jarlh

+0

是的我知道,但在我的查詢中,它不工作。 –

回答

0

我覺得你只是想where,不having

SELECT Assignedto, COUNT(Assignedto) as TC, 
     CONCAT(AVG(STATUS = 'CLOSE') * 100, '%') as SC, 
     CONCAT(AVG(STATUS = 'PENDING') * 100, '%') as PC, 
     SUM(TIMESTAMPDIFF(MINUTE, Request_Date, Xetr))/60 as WH , 
     (540-SUM(TIMESTAMPDIFF(MINUTE, Request_Date, Xetr)))/60 as VH, 
     COUNT(Feedback_Rate)/COUNT(Assignedto)*100 as Feed_Percent, 
     SUM(Feedback_Rate)/(count(Feedback_Rate)*5)*5 as AVG_Feedback 
FROM it_service_ticket st INNER JOIN 
    it_problem` p 
    ON st.it_problem_id = p.it_problem_id INNER JOIN 
    `city_master` cm 
    ON st.cityid = cm.city_id 
WHERE st.xetr BETWEEN '2017-01-01 00:00:00' AND '2017-03-31 12:00:00' 
GROUP BY Assignedto; 

一般情況下,只使用HAVING當你在聚合函數的過濾。

注:

  • 我簡化了邏輯,用於計算比率。您可能想要使用format()來獲取特定的小數位數。
  • 如果沒有必要,請勿使用反引號。他們只是使查詢更難寫和讀。
  • 同樣,表別名使查詢更易於編寫和閱讀。
  • 使用24小時時間格式 - 更不容易出錯。
  • 我懷疑Feed_Percent的計算是否正確。 COUNT()計數非NULL值的數量,所以他們比很可能是1
+0

非常感謝 –

0

你必須在選擇字段添加Xetr。沒有使用這個,你不能使用having條件與Xetr
試試這個

SELECT Assignedto,COUNT(Assignedto) as TC 
,CONCAT(count(case when STATUS = 'CLOSE' then 1 else null end) * 100/count(1), '%') as SC 
,CONCAT(count(case when STATUS = 'PENDING' then 1 else null end) * 100/count(1), '%') as PC 
,SUM(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr))/60 as WH ,(540-sum(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr)))/60 as VH, 
COUNT(Feedback_Rate)/COUNT(Assignedto)*100 as Feed_Percent, 
SUM(Feedback_Rate)/(count(Feedback_Rate)*5)*5 as AVG_Feedback,Xetr 
FROM `it_service_ticket` 
INNER JOIN `it_problem` 
ON `it_service_ticket`.`it_problem_id`=`it_problem`.`it_problem_id` 
INNER JOIN `city_master` 
ON `it_service_ticket`.cityid=`city_master`.city_id 

GROUP BY Assignedto 
HAVING `it_service_ticket`.`Xetr` BETWEEN '2017-01-01 12:00:00 AM' AND '2017-03-31 12:00:00 PM'; 

但筆者認爲,你必須使用在如我下面提到的性能條款Xetr

SELECT Assignedto,COUNT(Assignedto) as TC 
,CONCAT(count(case when STATUS = 'CLOSE' then 1 else null end) * 100/count(1), '%') as SC 
,CONCAT(count(case when STATUS = 'PENDING' then 1 else null end) * 100/count(1), '%') as PC 
,SUM(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr))/60 as WH ,(540-sum(TIMESTAMPDIFF(MINUTE,Request_Date, Xetr)))/60 as VH, 
COUNT(Feedback_Rate)/COUNT(Assignedto)*100 as Feed_Percent, 
SUM(Feedback_Rate)/(count(Feedback_Rate)*5)*5 as AVG_Feedback,Xetr 
FROM `it_service_ticket` 
INNER JOIN `it_problem` 
ON `it_service_ticket`.`it_problem_id`=`it_problem`.`it_problem_id` 
INNER JOIN `city_master` 
ON `it_service_ticket`.cityid=`city_master`.city_id 
where `it_service_ticket`.`Xetr` BETWEEN '2017-01-01 12:00:00 AM' AND '2017-03-31 12:00:00 PM' 
GROUP BY Assignedto;