2014-11-06 42 views
0

我有这个查询,它根据leadtype检索我所有潜在客户的聚合,然后将它们分组到城市中。获取MYSQL中聚合的另一列的单独/最小值

SELECT city, assign_count, 
    SUM(leadtype = 'paper' AND status='NEW') paper, 
    SUM(leadtype = 'door' AND status='NEW') door 
    FROM leads GROUP BY city 

这是一切优秀和良好,我可以如下

City 1 : Door | 12 Paper | 23 
    City 2 : Door | 33 Paper | 44 
    City 3 : Door | 44 Paper | 12 
    Etc etc etc.... 

但是显示的结果,我现在想强调和最低值assign_count的那些。

我怎样才能得到每个纸和门的最低assign_count。 我正在检索它,但它显然只是最后一次选定的lead的assign_count,并且仅适用于整个城市。不适用于按聚合分组的单独分组。

我想要这样显示。

City 1 : Door |Cnt: 1| 12 Paper |Cnt: 2| 23 // Door would be highlighted green in this case 
    City 2 : Door |Cnt: 6| 12 Paper |Cnt: 4| 23 // Paper would be highlighted green in this case 
    etc etc 

然而,上述查询我只能像这样显示,

City 1 : Cnt : 0 Door |12 Paper | 23 
City 2 : Cnt : 7 Door |12 Paper | 55 

甚至数是错误的,因为它显然只是选择查询的最后一次领先的assign_count值,不一定是最低的assign_count,并且绝对不是每个门和纸的最低价

希望我在这里让自己清楚。

+1

我不清楚你在问什么。为什么你不能在应用程序中这样做。如果可以的话,修复你的问题,以便表格结构为带有列标题的表格。我不知道这条线应该是什么意思(例如):城市1:门| Cnt:1 | 12纸| Cnt:2 | 23'。 – 2014-11-06 01:52:43

+0

我只是想要根据聚集分组的assign_count值,而不是城市。 – KyleK 2014-11-06 01:55:49

+0

什么是'assign_count'?您的查询如何使用“城市1:门|”提供结果集12纸| 23' ......? – ForguesR 2014-11-06 01:59:03

回答

1

这是你想要的吗?

SELECT city, assign_count, 
     SUM(leadtype = 'paper' AND status = 'NEW') as paper, 
     MIN(case when eadtype = 'paper' AND status = 'NEW' then assign_count end) as ac_paper, 
     SUM(leadtype = 'door' AND status = 'NEW') as door, 
     MIN(case when eadtype = 'door' AND status = 'NEW' then assign_count end) as ac_door 
FROM leads 
GROUP BY city; 

作为一个说明:你不应该包括在SELECT列表assign_count。它应该在聚合函数'MIN()'GROUP BY子句中。你得到的价值是不确定的(根据MySQL文档)。

+0

是的,这正是我想要的。谢谢 – KyleK 2014-11-06 02:25:24

相关问题