Запрос MySQL. Примеры SELECT: 41-50

Печать

Примеры могут быть использованы для практикума по запросам MySQL.

Запрос Q041. В случае, когда оператор IF используется несколько раз, удобнее заменить его оператором CASE. Оператор CASE (оператор множественного выбора) используется для оценки логического выражения и выполнения того или иного действия в зависимости от результата. В следующем примере поставленная партия считается «малой», если количество товара в партии меньше 500. В противном случае, то есть если количество товара больше или равно 500, партия считается «большой»:

SELECT dt, product_id, amount, 
CASE WHEN amount<500 THEN "малая" ELSE "большая" END AS mark
FROM m_income;

Запрос Q042. В следующем запросе MySQL если количество товара в поступившей партии меньше 300, то партия считается «малой». В противном случае, то есть если условие amount<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, amount, 
IF(amount<300,"малая",
IF(amount<1000,"средняя","большая")) AS mark
FROM m_income;

Запрос Q043. В следующем запросе MySQL если количество товара в поступившей партии меньше 300, то партия считается «малой». В противном случае, то есть если условие amount<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, amount, 
CASE
WHEN amount<300 THEN "малая"
WHEN amount<1000 THEN "средняя"
ELSE "большая"
END AS mark
FROM m_income;

Запрос Q044. В этом примере запроса MySQL продажи разделяются на три группы: малые (до 150), средние (от150 до 300), большие (300 и более). Далее, для каждой группы вычисляется итоговая сумма:

SELECT Category, SUM(outcome_sum) AS Ctgry_Total
FROM (SELECT amount*price AS outcome_sum,
IF(amount*price<150,"малая",
IF(amount*price<300,"средняя","большая")) AS Category
FROM m_outcome) AS t
GROUP BY Category;

Запрос Q045. Функция DateAdd используется для прибавления дней, месяцев или лет к данной дате и получения новой даты. Следующий запрос:
1) к дате из поля dt прибавляет 30 дней и отображает новую дату в поле dt_plus_30d;
2) к дате из поля dt прибавляет 1 месяц и отображает новую дату в поле dt_plus_1m:

SELECT dt, DATE_ADD(dt, INTERVAL 30 DAY) AS dt_plus_30d, 
DATE_ADD(dt, INTERVAL 1 MONTH) AS dt_plus_1m
FROM m_income;

Запрос Q046. Функция DateDiff предназначена для вычисления разницы между двумя датами в днях. Следующий запрос вычисляет разницу между датой в поле dt и текущей датой в днях:

SELECT dt, DATEDIFF(NOW(),dt) AS last_day
FROM m_income;

Запрос Q047. Вычисляется количество дней со дня поступления товара (таблица m_income) до текущей даты с помощью функции DateDiff и сопоставляется срок годности (таблица m_product):

SELECT a.id, product_id, dt, lifedays, DATEDIFF(NOW(),dt) AS last_day
FROM m_income AS a INNER JOIN m_product AS b
ON a.product_id=b.id;

Запрос Q048. Вычисляется количество дней со дня поступления товара до текущей даты, затем проверяется превышает ли это количество срок годности:

SELECT a.id, product_id, dt, lifedays, DATEDIFF(NOW(),dt) AS last_days, 
IF(DATEDIFF(NOW(),dt)>lifedays,"Да","Нет") AS date_expire
FROM m_income a INNER JOIN m_product b
ON a.product_id=b.id;

Запрос Q049. Вычисляется количество месяцев со дня поступления товара до текущей даты:

SELECT 
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM NOW()), EXTRACT(YEAR_MONTH FROM dt)) AS months
FROM m_income;

Запрос Q050. Выводится поквартальный отчет о количестве и сумме оприходованных товаров за 2011 год:

SELECT kvartal, SUM(outcome_sum) AS Total
FROM (SELECT amount*price AS outcome_sum, month(dt) AS m,
CASE WHEN month(dt)<4 THEN 1
WHEN month(dt)<7 THEN 2
WHEN month(dt)<10 THEN 3
ELSE 4 END AS kvartal
FROM m_income WHERE year(dt)=2011) AS t
GROUP BY kvartal

Подпишитесь на нашу еженедельную почтовую рассылку "SQL - примеры запросов".

Добавить комментарий


Защитный код
Обновить

Произведение «OFTOB.COM» публикуется на условиях лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Непортированная.