2011-09-16 71 views
1

每個服務都有不同的KPI。這些KPI與表checklist_has_kpi中的字段順序一起排序。 我想要按分配給KPI的訂單排序的單獨服務列表。按訂單選擇Mysql條件組的問題

我有這個疑問:

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
GROUP BY s.serviceid ORDER BY chk.order ASC 

但它不會產生我所期望的結果,我不明白什麼是錯在我寫的查詢。 給我一隻手嗎? 如果有什麼不清楚的地方問問! 感謝

+2

那麼你所期望的結果最早次序? – Jacob

+0

你有錯誤嗎?結果是否按照預期排序? –

回答

2

如果添加

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY'; 

然後你會看到爲什麼其他RDBMS不會允許這種語法:在SELECT

  • 3未聚集列,但一個在GROUP BY
  • ORDER BY列不在GROUP BY/SELECT和未聚集

如果你想GROUP BY而不是DISTINCT,那麼你就需要GROUP BY所有列在SELECT

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
GROUP BY s.serviceid, s.servicenameit, s.servicenameen 

但你有沒有chk.order訂購通過,無論是使用GROUP BY或DISTINCT

所以那麼這個怎麼樣,完全忽略重複?

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
ORDER BY chk.order ASC 

或者這ORDER BY每3分services

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
GROUP BY s.serviceid, s.servicenameit, s.servicenameen 
ORDER BY MIN(chk.order) 
+0

我愛你!解決這個問題的關鍵是MIN!非常感謝! – JellyBelly