2013-08-04 3 views
0

У меня есть один оператор select sql с тем же предложением where, что мне нужно представить результаты, используя множество групп. В моей таблице более 100 тысяч строк, и я не хочу выполнять один и тот же оператор select много раз, чтобы показать агрегированные результаты по-разному. My SQL заявление очень долго, но вот быстрый пример того, что я в настоящее время делаю:несколько групп по одному и тому же выражению SELECT

select term, count (loans), avg(days), sum(amt) where purpose = "debt" group by term 
select length, count (loans), avg(days), sum(amt) where purpose = "debt" group by length 
select funded, count (loans), avg(days), sum(amt) where purpose = "debt" group by funded 
... 

Кто-нибудь знает способ сделать выше, без необходимости выполнения нескольких операторов выбора?

Я попытался сделать начальный запрос в таблице temp и сделать группу по этой таблице, чтобы сохранить исходный запрос, но предполагает, что исходный запрос не содержит всех строк (предложение where может меняться в зависимости от ввода пользователя) ,

ответ

1

Это может быть может быть в состоянии объединить несколько GROUP BY s, но для этого требуется, чтобы вы обрабатывали результаты в своем коде, а не все агрегатные функции просты в обращении.

Во-первых, группа по нескольким полям:

SELECT term, length, COUNT(loans), AVG(days), SUM(amt) 
FROM MyTable 
WHERE purpose = 'debt' 
GROUP BY term, length 

Это приведет к более групп, чем вы на самом деле хотите; например:

term length COUNT(loans) AVG(days) SUM(amt) 
---- ------ ------------ --------- -------- 
T1 L1    12  3.4  56 
T1 L2    7  8.9  10 
T2 L1    23  4.5  6 
T2 L2    78  9   1 

Вы должны затем объединить записи, чтобы получить результат для вашей конкретной группы. Например, чтобы получить тот же результат, как GROUP BY term, объединить все записи с одинаковым значением term:

term length COUNT(loans) AVG(days) SUM(amt) 
---- ------ ------------ --------- -------- 
T1 -   12+7 = 19  ??? 56+10=66 
T2 -  23+78 = 101  ??? 6+1 = 7 

Для функций COUNT и SUM, вы можете просто добавить значения. Для функции AVG вам понадобится счетчик записей (COUNT(days)), чтобы правильно их комбинировать.


Это может быть лучше, чтобы сохранить результат группировки по всем направлениям во временную таблицу, а затем сделать дополнительный запрос GROUP BY для фактических результатов. (Опять же, вам нужно сохранить достаточную информацию, чтобы иметь возможность правильно вычислять среднее значение.)

+0

Спасибо, CL, я попробую. –

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