2016-09-07 1 views
-2

Я просто изучаю некоторый SQL, поэтому у меня есть вопрос.Как найти максимальное значение из группы в sql

-I есть таблица с именем TABL

-a переменная :ccname, которая имеет значение "Bottle"

таблица выглядит следующим образом:

+----------+---------+-------+--------+ 
    | Name  | Price | QTY | CODE | 
    +----------+---------+-------+--------+ 
    | Rope  | 3.6 | 35 | 236 | 
    | Chain | 2.8 | 15 | 237 | 
    | Paper | 1.6 | 45 | 124 | 
    | Bottle | 4.5 | 41 | 478 | 
    | Bottle | 1.8 | 12 | 123 | 
    | Computer | 1450.75 | 71 | 784 | 
    | Spoon | 0.7 | 10 | 412 | 
    | Bottle | 1.3 | 15 | 781 | 
    | Rope  | 0.9 | 14 | 965 | 
    +----------+---------+-------+--------+ 

Теперь я хочу, чтобы найти CODE от переменной :ccname с большим количеством! Поэтому я перевел так:

SELECT CODE 
FROM TABL 
GROUP BY :ccname 
WHERE QTY=MAX(QTY) 

В идеальном мире, что превратило бы в результате 478. В SQL-мире, что я должен написать, чтобы получить 478?

+2

Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете. –

+0

Хорошо, я сделал это. Это сервер Microsoft SQL Server. –

ответ

0

Попробуйте

SELECT CODE 
FROM TABLENAme 
WHERE QTY = (SELECT MAX(QTY) FROM TablName WHERE Name = :ccname) 
+0

Это отлично поработало! Спасибо! –

2

Вы, вероятно, хотите что-то вроде этого:

SELECT code 
FROM TABL 
WHERE Name=:ccname 
ORDER BY QTY DESC 
LIMIT 1 

Идея заключается в том, мы находим все строки таблицы, чьи Name колонна является такой же, как содержимое переменной :ccname, а затем заказать их по количеству в порядке убывания порядок и филити мы выбираем первый, который должен быть с наибольшей величиной, потому что они сортируются в порядке убывания.

0

Использование ORDER BY, надлежащего WHERE, и что-то, чтобы ограничить набор результатов одной строки:

SELECT CODE 
FROM TABL 
WHERE name = :ccname 
ORDER BY QTY DESC 
FETCH FIRST 1 ROW ONLY; 

Примечание: Некоторые базы данных по буквам ANSI стандарт FETCH FIRST 1 ROW ONLY, как LIMIT или SELECT TOP 1.

0

В зависимости от конкретной базы данных, вы можете использовать один из следующих вариантов, чтобы ограничить ваш результат установлен в одно значение после заказа существующих столбцов через ORDER BY пункта:

  • SELECT TOP 1
  • LIMIT 1
  • FETCH FIRST 1 ROW ONLY

Синтаксис Примеры

SELECT TOP 1 Code 
    FROM TABL 
    WHERE Name = :ccname 
ORDER BY QTY DESC 

или

SELECT Code 
    FROM TABL 
    WHERE Name = :ccname 
ORDER BY QTY DESC 
    LIMIT 1 

или

SELECT CODE 
    FROM TABL 
    WHERE Name = :ccname 
ORDER BY QTY DESC 
    FETCH FIRST 1 ROW ONLY; 
0

Использование присоединиться также может эффективно решить вопрос:

Select t1.Code 
From TABL As t1 Join (
     Select Name, Max(table.QTY) as MaxQTY 
     From TABL 
     Where Name = :ccname 
     Group by Name 
) As t2 
Where t1.QTY = t2.MaxQTY And t1.Name = t2.Name 

Объяснение:

Вы сначала рассчитать максимальное значение для «бутылки» с помощью подзапроса, а затем объединить эти две таблицы, чтобы выбрать соответствующую строку с MaxQTY и тем же именем.

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

  • Нет связанных вопросов^_^