Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Учебное пособие по MySQL /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Примеры стандартных запросов - Программирование от RIN.RU
Примеры стандартных запросов



Максимальное значение столбца


"Как определить наибольшее значение в столбце?"


SELECT MAX(article) AS article FROM shop


+---------+
| article |
+---------+
| 4 |
+---------+


Строка, содержащая максимальное значение некоторого столбца


"Как определить номер, дилера и цену самого дорогого изделия?"


В ANSI SQL это легко делается при помощи вложенного запроса:


SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop)


В MySQL (в котором вложенные операторы SELECT еще не реализованы) такая задача выполняется в два этапа:


  1. Следует получить максимальное значение цены из таблицы при помощи оператора SELECT.

  2. Используя это значение, необходимо составить следующий запрос:


    SELECT article, dealer, price
    FROM shop
    WHERE price=19.95



Существует еще одно решение: отсортировать все строки по убыванию цен и после этого получить первую строку, используя специальный оператор LIMIT:


SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1


Примечание: если существует несколько самых дорогих изделий (например, каждое из них стоит 19,95), запрос, использующий LIMIT, возвращает лишь одно из них!


Максимальное значение столбца для группы


"Как определить наибольшую цену по каждому изделию?"


SELECT article, MAX(price) AS price
FROM shop
GROUP BY article


+---------+-------+
| article | price |
+---------+-------+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+---------+-------+


Строка, содержащая максимальное значение некоторого столбца


"Для каждого изделия, как определить дилер(ов) с самыми высокими ценами?"


В ANSI SQL это легко делается при помощи вложенного запроса:


SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);


В MySQL такая задача выполняется в два этапа:


  1. Следует получить список (изделие, максимальная цена)

  2. Для каждого изделия, получить соответствующие записи, в которых цена соответствует максимальной.


Это легко делается с помощью временной таблицы:


CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL DEFAULT "0000" NOT NULL,
price DOUBLE(16,2) DEFAULT "0.00" NOT NULL);


LOCK TABLES shop read;


INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;


SELECT shop.article, dealer, shop.price FROM shop, tmp
WHERE shop.article=tmp.article AND shop.price=tmp.price;


UNLOCK TABLES;


DROP TABLE tmp;


Если вы не используете ключевое слово TEMPORARY, вам также следует поставить блокировку на таблицу tmp.


"А можно ли это сделать одним запросом?"


Да, но только используя совершенно неэффективный трюк, который я называю "Трюк MAX-CONCAT":


SELECT article,
SUBSTRING( MAX( CONCAT(LPAD(price,6,"0"),dealer) ), 7) AS dealer,
0.00+LEFT( MAX( CONCAT(LPAD(price,6,"0"),dealer) ), 6) AS price
FROM shop
GROUP BY article;


+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+---------+--------+-------+


Разумеется, последний пример можно сделать чуть эффективнее, если разбиение катенизированной строки делать на стороне клиента.


<<<  НазадВперед  >>>
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Подсоединение к серверу и отсоединение от него

Ввод запросов

Создание и использование базы данных

Получение информации о базах данных и таблицах

Использование mysql в пакетном режиме

Запросы проекта "Близнецы" (Twin Project)

Использование MySQL совместно с Apache

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь