2013-07-01 2 views
1

У меня есть таблица, какКак получить STDDEV() групп элементов без MIN() и MAX() группы

| id | user | bottle | count | 
| 1 | foo | beer | 2 | 
| 2 | bar | beer | 5 | 
| 3 | som1 | beer | 6 | 
| 4 | som2 | beer | 4 | 
| 5 | som1 | wine | 1 | 

т.д.

Как я могу получить STDDEV() без MIN() и MAX() значение count для каждой группы (пиво, вино и т. д.)?
то есть, как я могу получить

| bottle |  stddev  | 

| beer |stddev of 2 and 4| 

?

Также как я могу получить количество строк, в результате чего запрос, подобный приведенному выше, возвращается?

До сих пор я пытался

SELECT STD(count) as stddev, bottle 
FROM drinks WHERE count < (
    SELECT MAX(count) FROM drinks) 
       AND count > (
    SELECT MIN(count) FROM drinks) 
GROUP BY bottle; 

но это работает для MAX() всей таблицы, а не только агрегации Используйте GROUP BY

ответ

3

и объединения, чтобы принести в экстремальных значений, затем отфильтровать их и рассчитать стандартное отклонение:

select bottle, STDEV(d.count) 
from drd.inks d join 
    (select bottle, MIN(count) as minc, MAX(count) as maxc 
     from drinks 
     group by bottle 
    ) dsum 
    on d.bottle = dsum.bottle and 
     d.count not in (dsum.minc, dsum.maxc) 
group by d.bottle 
+1

+1 nice one ... :) – Stephan

+0

nevermind, many Пол: Мужской –