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

-У меня есть таблица с названием TABL

-переменная :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
F.Mysir 7 Сен 2016 в 19:21

5 ответов

Лучший ответ

Попробуй это

SELECT CODE
FROM TABLENAme
WHERE QTY = (SELECT MAX(QTY) FROM TablName WHERE Name = :ccname)
0
Jaydip Jadhav 7 Сен 2016 в 16:27

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

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

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

2
redneb 7 Сен 2016 в 16:26

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

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
Gordon Linoff 7 Сен 2016 в 16:27

В зависимости от конкретной базы данных вы можете использовать одну из следующих опций, чтобы ограничить набор результатов одним значением после упорядочивания существующих столбцов с помощью предложения 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
Rion Williams 7 Сен 2016 в 16:29

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

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

Пояснение:

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

0
Quote 15 Сен 2016 в 21:50