2015-11-12 1 views
1

Я застрял в следующей проблеме. У меня есть 1 стол, который выглядит следующим образом:Строки строк SQL строки и вычисляют среднее значение

field_number.. Value 
```````````````````````````````` 
1 ......................... 1 
2 ..........................1 
3 ......................... 2 
4 ..........................2 

т.д.

Я хочу, чтобы сгруппировать различные fieldnumbers и имеют среднее значение для столбца значения. Таким образом, вывод должен быть:

field_number................Value 

name(1,2)...................... 1..............  ((1+1)/2) 

name(3,4)...................... 2..............  ((2+2)/2) 

Я проверил предыдущие вопросы, но не может найти какой-либо вопрос, который охватывает этот вопрос (я мог бы найти на неправильные ключевые слова, хотя). Так что, если это уже было охвачено моими приложениями, но любая помощь или точка для предыдущего ответа были бы оценены.

** ============= ============= UPDATE **

Я прошел через ваши предложения, но не получил это право , Поэтому я стараюсь быть более конкретным. У меня почти есть результат, который я хочу, кроме того, что хочу иметь фиксированное значение в одном из моих столбцов. У меня есть следующий запрос:

Select 
Avg(wp_rg_lead_detail.value), 
wp_rg_lead_detail.field_number, 
From 
wp_rg_lead_detail 
Where 
wp_rg_lead_detail.field_number In (15, 17, 24) A 
UNION 
Select 
Avg(wp_rg_lead_detail.value), 
wp_rg_lead_detail.field_number, 
From 
wp_rg_lead_detail 
Where 
wp_rg_lead_detail.field_number In (16, 108, 18) 

и т.д.

Это дает мне таблицу с двумя столбцами

wp_rg_lead_detail.value................field_number 
4.3 (average)..............................15 (first value of av calculation) 

То, что я хочу, чтобы изменить номер поля (15 в данном случае) в фиксированное значение (текст). Что и как следует добавить в запрос?

+0

пожалуйста, отметьте ответ .. –

ответ

1
SELECT avg(value) FROM table WHERE field_number in (1,2) 
SELECT avg(value) FROM table WHERE field_number in (3,4) 
+0

Tnx для быстрого ответа. Когда я вхожу в первую строку, он работает. Добавление второй строки дает мне ошибку: # 42000У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «SELECT avg (value) FROM wp_rg_lead_detail WHERE field_number в (3,4)» в строке 2.Кроме того, этот запрос дает мне 1 olumn. Мне нужен второй столбец с именем. например, имя (1,2). – Michel

1

Для обобщенного ответа.

SELECT CONCAT('name','(',GROUP_CONCAT(field_number),')') AS field_number, 
AVG(Value) as Value 
FROM table_name 
group by table_name.`Value` 

Надеюсь, это поможет.

+0

Tnx, мне удалось получить результат, я хочу с помощью следующего запроса: Выберите Avg (wp_rg_lead_detail.value), wp_rg_lead_detail.field_number От wp_rg_lead_detail Где wp_rg_lead_detail.field_number В (15, 17, 24) UNION Выберите Avg (wp_rg_lead_detail.value), wp_rg_lead_detail.field_number От wp_rg_lead_detail Где wp_rg_lead_detail.field_number В (16, 108, 18) и др. Теперь я получаю два столбца: один с 1 столбцом со средними значениями и один столбец с одним из значений. То, что я хочу, вместо одного из значения во втором столбце, только фиксированное имя .. это возможно? – Michel

+0

, конечно, это возможно. Каково ваше 'фиксированное значение' –

+0

Я отредактировал запрос, я неправильно понял вопрос .. pls check –

1

Если ваша таблица действительно это просто, вы можете уйти с:

select distinct 
    Value, 
    count(Value) as '#' 
from table_name 
group by Value 

Если вы Acctually хотите сгруппировать по диапазону, чем вы можете поставить логику диапазона в вашей статье группирования (см this fiddle)

select distinct 
    avg(Value) as average, 
    floor(Value), 
    count(Value) as '#' 
from table_name 
group by floor(Value) 

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

Если вы на самом деле также заинтересованы в ваших соответствующих полях, используйте group_concat() как так

select 
    Value, 
    group_concat(
     distinct field_number 
     order by Value 
    ) as fields 
from table_name tn1 
group by Value 
order by Value 

выход:

Value   | fields 
--------------------------------- 
1    | 1,2  
2    | 3,4 

См this fiddle реализован с this блоге

+0

Я обновил свой вопрос – Michel

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