2013-04-13 4 views
0

мой вопрос связан с Select, я хочу заказать поле по ASC и DESC, посмотрите на пример:Сортировать по самым высоким и самым низким

У меня есть таблица продуктов, поле, что я хочу заказать это называется цена, поэтому, я знаю, что я могу это сделать:

SELECT Price FROM Products ORDER BY Price ASC. 

Но я хочу, чтобы увидеть самую высокую цену и самый низкий за самый высокий я знаю, что я могу сделать:

SELECT Price FROM Products ORDER BY Price ASC limit 1; 

Итак, как я могу выбрать самое высокое значение и самое низкое, бот h в 1 выбрать?

Я также хочу выбрать название продукта с наивысшим значением, а продукт с наименьшим.

С уважением.

+0

Вы просто хотите цену или целый ряд отличая эту цену? И как бы вы разорвали связи (несколько строк, разделяющих самый низкий/самый высокий)? Выберите произвольный? Вернуть всех сверстников? –

ответ

2

Это покажет все продукты с максимальной ценой или с минимальной ценой:

SELECT Products.* 
FROM Products 
WHERE Price = (SELECT MAX(Price) FROM Products) 
     OR Price = (SELECT MIN(Price) FROM Products) 

Или, может быть, вы хотите что-то вроде этого:

SELECT 
    Products.*, 
    m.mx As Highest, 
    m.mn As Lowest, 
    CASE WHEN Products.Price = m.mx THEN 'Max' ELSE 'Min' END As Is_Max_or_Min 
FROM 
    Products INNER JOIN (
    SELECT MAX(Price) mx, MIN(Price) mn 
    FROM Products 
) m ON Products.Price IN (m.mx, m.mn) 

Если вы хотите, чтобы они были в одном ряду, и если есть только один продукт с максимальной ценой и только один с минимумом, вы можете использовать что-то вроде этого:

SELECT 
    m.Lowest, p1.Name Name_Lowest, 
    m.Highest, p2.Name Name_Highest 
FROM 
    (SELECT MIN(Price) Lowest, MAX(Price) Highest FROM Products) m 
    INNER JOIN Products p1 ON m.Lowest = p1.Price 
    INNER JOIN Products p2 ON m.Highest = p2.Price 
LIMIT 1 

Или, если вам просто нужно что-то easyer, вы могли бы использовать это:

(SELECT 'Max' Is_Max_Or_Min, Products.* 
FROM Products ORDER BY Price DESC LIMIT 1) 
UNION ALL 
(SELECT 'Min', Products.* 
FROM Products ORDER BY Price LIMIT 1) 
+0

ОК и ... оба в одном выбрать? если это возможно :) – Tennosuke

+0

@Tennosuke я обновил свой последний запрос, я думаю, это то, что вы ищете ... PLS, дайте мне знать, если все в порядке :) – fthiella

+0

это так сложно? нет более простого способа? – Tennosuke

0

, если вы хотите увидеть, как самый высокий и самый низкий цена, использовать этот запрос:

select highest, lowest from 
(
SELECT Price as highest FROM Products ORDER BY Price DESC limit 1; 
SELECT Price as lowest FROM Products ORDER BY Price ASC limit 1; 
) t 
4

Что об использовании простых MIN и MAX агрегатной функции

SELECT MAX(Price) as MaxPrice, MIN(Price) as MinPrice FROM Products 
+0

он работает, спасибо! – Tennosuke

0

Самый простой способ:

SELECT MIN(Price) LowestPrice, MAX(Price) HighestPrice FROM Products 

Но в некоторых случаях вы можете использовать UNION заявление:

(SELECT 'Lowest' type, Price FROM Products ORDER BY Price ASC LIMIT 1) 
UNION 
(SELECT 'Highest' type, Price FROM Products ORDER BY Price DESC LIMIT 1) 
+0

А теперь немного сложнее, помимо цены, если я хочу, чтобы название продукта было самым высоким и самым низким? Как вы думаете? – Tennosuke

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