Реален ли запрос?

kvf77

Red Devil
Реален ли запрос?

Одна фирма попросила сделать ей форму-отчет к магазину, а начальник там помешан на одинарных запросах. Задача стоит сложная и я никак не могу понять реально ли выполнить ее одним запросом (во всяком случае у меня не получается). Притом, что таблицы немного неправильно на мой взгляд составлены. В частности:
total_amount = cart_amount - discount_amount + delivery_amount + tax_amount, но cart_amount нет в таблице order, а в таблице order_item есть поле price (Тогда cart_amount = price * quantity).

Есть 2 таблицы:
1)
order (заказы)
id
total_amount // Конечная стоимость
discount_amount // Скидка
delivery_amount // Доставка
tax_amount
order_status // Статус заказа
order_date DATETIME // дата заказа

2)
order_item (товары)
id
order_id // Номер заказа
price // стоимость товара
quantity // колличество товара в заказе

Что требуется? Сделать отчет по неделе или месяцу или году или общий, с указанной даты по указанную. Причем, если по неделе, то указанный перод должен выведен в таблицу с разбиением на недели. В общем какой-то заумный отчет одним запросом.
В таблице должно присутствоать: кол-во новых заказов за период, кол-во обработанных (order_status=1), общее кол-во заказов, кол-во купленных товаров, общая выручка, сумма скидок, чистая выручка (без учета доставок). Вот такая фигня. В MySql нету вложенных запросов и в один запрос все это затолкать не получается :-( Помогите.
 

Кром

Новичок
Причем тут начальник помешанный на запросах я не понял. Если он такой любитель SQL, пусть сам запросы составляет.

Одним запросом это сделать нереально и главное, совершенно не нужно.
 

kvf77

Red Devil
Автор оригинала: Кром
Причем тут начальник помешанный на запросах я не понял. Если он такой любитель SQL, пусть сам запросы составляет.

Одним запросом это сделать нереально и главное, совершенно не нужно.
Я с тобой согласен. Начальник не шарит вообще в SQLе - но видать кто-то когда-то ему наговорил и он стоит на своем - я уже два дня с ним парюсь :-(
 

Falc

Новичок
kvf77
>>начальник там помешан на одинарных запросах
>>Начальник не шарит вообще в SQLе

Че-то бред какой-то.

-~{}~ 08.04.04 12:28:

>>я уже два дня с ним парюсь

Поставь оракл и не парься, там вроде можно такое одним запросом :)
 

ForJest

- свежая кровь
Затолкать можно, никакого оракла не нужно.
SELECT <тут немного извращений>
FROM <таблицы, связи>
WHERE order_date BETWEEN <дата1> AND <дата1>
GROUP BY DATE_FORMAT(order_date, '%u')

'%u' - для недель. По месячно, по дневно и т.д. я думаю сам догадаешься - просто нужно чтобы группировка соответствовала периоду.

Теперь об извращениях. Как видно пугает в основном
кол-во обработанных (order_status=1)
Это решается как SUM(IF(order_status=1, 1, 0)) handled. Остальное - тривиальные SUM() и COUNT(). А начальник может проверяет просто твой уровень.
P.S. Я не разбирался досконально со структурой таблиц.
 

Falc

Новичок
ForJest
Раскажи мне как подсчитать кол-во купленных товаров и кол-во обработанных (order_status=1) заказов.
Одним запросом???
 

ForJest

- свежая кровь
Ах да. Тут один ко многим... Они ж перемножаться...
Тогда короче никак. Через временные таблицы решай. Хотя, если тот навороченный нначчаййникк предоставит тебе четвёртый мускул предоставит - тогда сможешь и одним запросом.
 

.des.

Поставил пиво кому надо ;-)
Притом, что таблицы немного неправильно на мой взгляд составлены. В частности:
total_amount = cart_amount - discount_amount + delivery_amount + tax_amount, но cart_amount нет в таблице order, а в таблице order_item есть поле price (Тогда cart_amount = price * quantity).
Именно так и должно быть составлено.

-~{}~ 09.04.04 05:09:

Falc
Раскажи мне как подсчитать кол-во купленных товаров и кол-во обработанных (order_status=1) заказов.
Одним запросом???
Falc, поправьте меня если меня глючит под утро %)

Код:
SELECT SUM(OIT.qty) product_count, COUNT(DISTINCT(OI.oid)) order_count
FROM order_item OIT LEFT JOIN order_info OI ON OIT.oid=OI.oid AND OI.status=1;
На самом деле, многое действительно можно посчитать одним запросом, но Кром с самого начала сделал правильное замечание.

2kvf77
Тут не нужен один запрос. Что это за любовь такая впихнуть все в один запрос.
И странный Вы сотрудник если не можете указать на ошибки начальнику.
 

Falc

Новичок
.des.
>>Falc, поправьте меня если меня глючит под утро %)

Вроде все верно.

Но этож сколько JOIN'ов будет и COUNT DISTINCT'ы будут тормозить достаточно сильно.
 

kvf77

Red Devil
Я могу указать начальнику на ошибки. Его это мало волнует. Это не моя постоянная работа, а просто разовая акция. Надо быстро было к чужому проекту прикрутить статистику. Я не Дон Кихот ломать копья перед начальниками :)
Он хочет - у меня не получается - я спросил. За одно и свой уровень повысить - вдруг и правда можно.
 
Сверху