2014-11-06 4 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 на бумагу и дверь. Я забираю его, но это просто 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'. –

+0

Я просто хочу значение assign_count, сгруппированное по агрегатам, в отличие от города. – KyleK

+0

Что такое 'assign_count'? Как ваш запрос может дать результат с «City 1: Door | 12 Бумага | 23' ...? – ForguesR

ответ

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; 

Как примечание: вы не должны включать assign_count в SELECT списке. Он должен либо находиться в функции агрегации 'MIN()', либо в предложении GROUP BY. Полученное вами значение является неопределенным (согласно документации MySQL).

+0

Yup, это именно то, что я хотел. благодаря – KyleK

Смежные вопросы