Как посчитать строки, названные заказами за последние 30 дней, и суммировать цену этого заказа? - PullRequest
0 голосов
/ 10 апреля 2019

Таблица заказов состоит из количества, цены, имени пользователя и даты заказа в формате datetime.

Заказ отправляется со страницы корзины, если отправлено несколько товаров, например 8 мониторов и 2 шт. Он будет вводить их как две отдельные записи.

Цель: умножить количество на цену для каждой записи, которую имеет пользователь, затем добавить эти записи за последние 30 дней.

Попробовал приведенный ниже код, чтобы получить заказы за последние 30 дней, которые не работают.

edit: рабочий код для получения заказов за последние 30 дней

SELECT * FROM `orders` 
where orderdate between adddate(now(),-30) and now()

Честно говоря, не уверен, с чего начать с приведенного выше оператора sql, не уверен, куда именно идут функции groupbys, count и sum (), поскольку я только начинаю с sql.

Ответы [ 3 ]

0 голосов
/ 10 апреля 2019

Будьте более точным:

WHERE orderdate >= CURRENT_TIMESTAMP - INTERVAL 30 DAY

Или, потому что вы, вероятно, не заботитесь о компоненте времени:

WHERE orderdate >= CURRENT_DATE - INTERVAL 30 DAY
0 голосов
/ 10 апреля 2019

Чтобы получить «общую стоимость заказа» за последние 30 дней, необходимо рассчитать SUM() для price*quantity:

SELECT SUM(price*quantity) AS total_order_value 
FROM orders 
WHERE orderdate BETWEEN NOW() - INTERVAL 30 DAY and NOW()
0 голосов
/ 10 апреля 2019

Вы можете использовать запрос ниже

SELECT SUM(`price`) AS sum FROM orders
WHERE `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

Если вам нужно посчитать строку и суммировать продажную цену

SELECT SUM(`price`) AS sum,COUNT(*) AS counter FROM orders
WHERE `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

В качестве альтернативы, если вы хотите эти запросы по имени пользователя,

SELECT SUM(`price`) AS sum FROM orders
WHERE uname = 'test' and `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

SELECT SUM(`price`) AS sum,COUNT(*) AS counter FROM orders
where uname = 'test' and `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...