Программирование >>  Руководство по sql 

1 ... 81 82 83 [ 84 ] 85 86 87 ... 105


Результат:

5УРе

minprice

title id

business

1799

BU1032

business

2.99

BUllll

business

2.99

BU2075

business

2.99

BU7832

mod cook

2.99

MC2222

mod cook

2.99

MC3021

popular comp

20.00

PC1035

popular comp

20.00

PC8888

popular comp

20.00

PC9999

psychology

7.00

PS1372

psychology

7.00

PS2091

psychology

7.00

PS2106

psychology

7.00

PS3333

psychology

7.00

PS7777

trad cook

11.95

TC3218

trad cook

11.95

TC4203

trad cook

11.99

TC7777

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

Более полный запрос, отображающий как цену, так и минимальную цену, выводит вас на правильный путь:

SQL:

select type, min(price) from titles

where type is not null group by type order by type

Результат:

ype

business business business business mod cook mod cook popular comp popular comp popular comp psychology psychology psychology psychology

as minprice, price, title id

minprice

price

title id

2.99

~ l9.99

BiFi or2

2.99

11.95

BUllll

2.99

2.99

BU2075

2.99

19.99

BU7832

2.99

19.99

MC2222

2.99

2.99

MC3021

20.00

22.95

PC1035

20.00

PC8888

20.00

PC9999

7.00

21.59

PS1372

7.00

10.95

PS2091

7.00

PS2106

7.00

19.99

PS3333



psychology trad cook trad cook trad cook

7.00 11.95 11.95 11.99

7.99 20.95 11.95 14.99

PS7777 TC3218 TC4203 TC7777

Теперь должно быть ясно: если уж что-то вам действительно нужно, так это отобразить строку (или строки) в каждой фуппе, в которой значения цены и минимальной цены совпадают. В своем условии поиска вы должны использовать агрегирующую функцию. Предложение WHERE не позволяет сделать это, а HAVING - позволяет. Одним словом, похоже, что нам опять придется обратиться за помощью к предложению HAVING.

Чтобы отобразить идентификационные номера для сфОк, содержащих минимальную цену по каждой фуппе, попытайтесь сделать следующее:

SQL:

select type, min(price) as minprice, price, title id from titles

where type is not null group by type having price = min(price) order by type

Результат: typ e

business mod cook popular comp psychology trad cook

minprice

2Г99 2.99 20.00 7.00 11.95

title id

lu207~5 MC3021 PC8888 PS2106 TC4203

Теперь у вас есть список типов книг, минимальная цена по каждому типу и книги, имеющие такую цену.

Однако не следует забывать, что этот запрос может не подходить для некоторых систем. Многие из них не допускают каких-либо иных значений в операторе SELECT, кроме столбцов из списка GROUP BY и афегируемых столбцов. Таким образом, может оказаться, что подобное использование столбца titleid является недопустимым.

Те же результаты можно получить с помощью подзапроса:

SQL:

select type, price, title id from titles t where price =

(select min(price)

from titles t2

where t.type = t2.type group by t2.type)

Результат:

type

business mod cook popularcomp psychology trad cook

price

279 9~ 2.99 20.00 7.00 11.95

title id

BU2075 MC3021 PC8888 PS2106 TC4203



Как избежать проблем с предложением HAVING

Ниже приведено несколько соображений, которые помогут вам избежать проблем с использованием комбинаций предложений WHERE, GROUP BY и HAVING.

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

SQL:

select pub id, type from titles group by pub id, type order by pub id, type

Результат:

pub id type

0736 business

0736 psychology

0877 NULL

0877 mod cook

0877 trad cook

1389 business

1389 popular comp

SQL:

select pub id, type from titles

where pub id <> 0877 group by pub id, type order by pub id, type

Результат:

pub id type

0736 business

0736 psychology

1389 business

1389 popular comp

В запросах с агрегирующими функциями предложение WHERE накладывает офаничения на строки, используемые при вычислении этих функций и создании фупп:

SQL:

select pub id, type, max(advance) from titles

where pub id <> 0877 group by pub id, type order by pub id, type

Результат:

pub id type

0736 business 10125.00

0736 psychology 7000.00

1389 business 5000.00

1389 popular comp 8000.00



1 ... 81 82 83 [ 84 ] 85 86 87 ... 105

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика