按顺序选择Mysql条件组的问题

时间:2011-09-16 11:20:26

标签: mysql group-by sql-order-by

每项服务都有不同的KPI。这些KPI与表checklist_has_kpi中的字段顺序一起订购。 我想要一个按分配给KPI的订单排序的单独服务列表。

我有这个问题:

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

但是它没有产生我期望的结果,我不明白我写的查询中有什么问题。 帮帮我? 如果有什么不清楚,请问! 感谢

1 个答案:

答案 0 :(得分:2)

如果你添加

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

然后你会看到其他RDBMS不允许这种语法的原因:

  • SELECT中有3个未聚合的列,但GROUP BY中有一个
  • ORDER BY列不在GROUP BY / SELECT中而不是聚合

如果你想要GROUP BY而不是DISTINCT,那么你需要SELECT中的GROUP BY所有列

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

但是,无论是使用GROUP BY还是DISTINCT,您都没有chk.order订购

那么,完全忽略重复呢?

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

或者按照每3x 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)