2013-07-11 2 views
1

Если у меня есть таблицаСравнивая среднее в MYSQL

shirt 

+--------+------+ 
| color | size | 
+--------+------+ 
| red | 2 | 
| red | 4 | 
| red | 2 | 
| blue | 3 | 
| blue | 5 | 
| yellow | 2 | 
| yellow | 7 | 
+--------+------+ 

, и я только хочу, чтобы отобразить те, которые выше среднего

так

shirt 

+--------+------+ 
| color | size | 
+--------+------+ 
| red | 4 | 
| blue | 5 | 
| yellow | 7 | 
+--------+------+ 

Что бы быть лучшим способом сделать это в MYSQL?

EDIT: У меня есть код для другого набора. Я просто составил быстрый пример, чтобы я мог видеть, как это делается, и попробуйте сами.

+2

Не можете ли вы понять, как это сделать, используя те же идеи, что и в моем ответе на ваш последний вопрос? SO не является местом, чтобы заставить людей писать код для вас, вы должны сначала попытаться решить проблему самостоятельно. – Barmar

ответ

4

попробовать:

SELECT shirt.color, shirt.size 
FROM shirt INNER JOIN (SELECT color, AVG(size) size FROM shirt GROUP BY color) AS table2 
ON shirt.color = table2.color 
WHERE shirt.size >= table2.size 

Вот SQLFiddle

UPDATE

с таким же именем таблицы.

+0

Ваша скрипка крутая .. как это .. – Olrac

+1

Спасибо вам большое, сэр. – Katseye

+0

Ухать за комментарием от downvoter? –

0
select * from shirts where size > (select avg(size)/2 from shirts); 
1

Вам нужно рассчитать среднее значение. Вы можете сделать это, используя внутренний запрос:

select color, size 
from shirts 
where size > (select avg(size) from shirts) 

В Oracle можно использовать «с» пункта, иначе «общее табличное выражение» для лучшей эффективности. В MySQL вам, возможно, придется использовать два отдельных оператора - один для получения среднего значения, а один - для выбора - если оптимизатор выполняет внутренний запрос для каждой строки.

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