2014-12-02 3 views
0

Пример:Mysql неправильный синтаксис

SELECT AVG(cost) 
FROM items 
WHERE seller_id=6 

Допустим, я хочу, чтобы найти среднюю стоимость товаров от продавца 6 и среднюю стоимость товаров от продавца 10. Однако мне нужно сделать это в один SQL. Когда я делаю продавец_ид = 6 И 7. Это дает мне среднюю стоимость 6 и 7. Однако я хочу, чтобы среднее значение было 6 И среднее значение 7.

Это вопрос: Наши заказы имеют 5 приоритетов: «1-СРОЧНО», «2-ВЫСОКИЙ», «3-СРЕДНИЙ», «4-НЕ СПЕЦИФ», «5-НИЗКИЙ». Какой тип заказов имеет самую высокую сумму «общей цены»?

мой SQL:

SELECT SUM(o_totalprice) 
FROM orders 
WHERE `o_order-priority`='1-URGENT' AND '2-HIGH' AND "3-MEDIUM" AND "4-NOT SPEC" AND "5-LOW" 

ответ

4
SELECT seller_id,AVG(cost) FROM items 
WHERE seller_id IN (6,10) 
GROUP BY seller_id 

И если вы хотите для всех продавцов просто удалить seller_id IN (6,10) пункт

SQL Fiddle For 2 sellers

SQL Fiddle for all sellers

Редактировать на основе редактировать Ваш вопрос в

SELECT o_order-priority, 
SUM(o_totalprice) as total 
FROM orders 
GROUP BY o_order-priority 
ORDER BY total DESC 
LIMIT 1 

Это дает o_order-priority, который имеет максимальную сумму. И если вы удалите предел, это даст вам общую сумму для всех приоритетов.

+0

Теперь, если мне нужен только sql, который получит только тип заказа, запустив его? –

+0

Просто подберите тип формы результата. Вы можете отменить подсчет –

+0

. Получил, что, однако, когда я использую этот SQL, он возвращает o_orderpriority как o_orderpriority ... –

0

Попробуйте сгруппировать его, используя seller_id.

SELECT seller_id, AVG(cost) 
FROM items 
WHERE seller_id in (6,10) 
GROUP BY seller_id 
0

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

SELECT seller_id, AVG(cost) 
FROM items 
WHERE seller_id in (6,7) 
GROUP BY seller_id 
0

Пожалуйста, попробуйте это.

SELECT seller_id,AVG(cost) 
FROM items 
WHERE seller_id in (6,10) 
group by seller_id 

Если вам нужен продавец мудрую стоимость AVG для всех продавца попробуйте

SELECT seller_id,AVG(cost) 
FROM items 
group by seller_id 
-1

Немного теории, прежде чем я разместить код
при использовании агрегатных функций, таких как средн, сумма и т.д. Вы должны понимать, это среднее значение будет рассчитано для конкретной группы. скажем, вы хотите найти средние оценки девочек и мальчиков, тогда группировка основана на гендерном равенстве. аналогично в вашем случае, вы хотите найти среднее значение у продавца 6, поэтому вначале вам нужно сформировать группы продавцов, основанные на их продавце.

теперь, когда вы сформировали группы вы выбираете группу с продавцом ид 6.
Теперь изменения запроса в

SELECT AVG(cost) 
FROM items 
WHERE seller_id=6  << Selecting the group 
GROUP BY seller_id  << Making groups. 

Если вы хотите узнать, что я сделал, попробуйте запустить этот запрос,

Select AVG(COST),seller_id 
From ITEMS 
GROUP BY seller_id 

Это вернет среднюю стоимость и продавца_ид всех продавцов.

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

УКАЗАНИЕ: При использовании агрегатной функции всегда должно быть присоединено предложение group by, а также выбранные столбцы должны быть в разделе group by. Если у вас больше выбранных столбцов и меньше в предложении group by, это приведет к ошибке.

Для Вашего второго вопроса, этот запрос будет работать

Select MAX(SUM(o_total_price)) 
FROM ORDERS 
GROUP BY o_order-priority 

Опять же теории, сгруппировать столбцы, а затем плавник суммы в каждой группе, а затем выбрать максимальную сумму среди групп.

+0

Когда я запускаю это, он говорит, что у меня есть недопустимое использование групповых функций ... –

+0

, который запрашивает sir? и не могли бы вы отправить точную ошибку? –

+0

oh my bad, я полностью забыл, что мы не можем использовать и агрегировать функцию для функции agregate, потому что, когда max вычисляется сначала, он не знает, какая сумма. Чтобы обойти это, есть два пути. Один показан @Hanky ​​Panky выше, а другой - встроенными sql-запросами. SELECT MAX (TOTAL)) FROM (Выберите SUM (o_total_price) как TOTAL ОТ ЗАКАЗОВ GROUP BY o_order-priority). Здесь я сначала выбрал все итоги всего списка приоритетов, а затем из этого представления/виртуальной таблицы i прописано максимальное количество итогов. –

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