Доброй ночи. Есть таблица с заказами order. Можно ли в SQL запросе разделить одно значение на другое?
Хочу сумму всех заказов разделить на количество заказов.
Можно ли сделать на подобии CONCAT?
$sql = "CONCAT (sum / count) AS check";
В sum и count соответствующие значения уже получены.
На мой взгляд ты явно делаешь что-то не то, выглядит так, будто ты запросом из 4х подзапросов пытаешься вытянуть данные, если тебе удастся написать такое синтаксически верно, то у тебя получется результат из 4х декартовых произведений таблицы oc_order, и сортировка тебя сильно удивит.
Закрывай этот вопрос, он себя исчерпал, и пиши новый, с описанием полей таблицы, описанием результата который тебе нужен, запросом, который ты показывал в комментариях (чтобы люди видели что ты уже пытался делать, а то вопрос удалят, как задание).
И используй теги MySQL, SQL, и php (или на каком языке ты это делаешь).
Тогда помогут, а так ты дал слишком мало информации для ответа.
$sql .= ", (SELECT COUNT(*) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS count";
$sql .= ", (SELECT SUM(total) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS sum";
$sql .= ", sum / count AS check";
Сергей Водаков,
Fatal error: Uncaught Exception: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*)/SUM(total) AS check FROM `oc_order` od WHERE od.customer_id = ' at line 1
Error No: 1064
$sql .= ", (SELECT COUNT(*) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS count";
$sql .= ", (SELECT SUM(total) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS sum";
$sql .= ", (SELECT SUM(total)/COUNT(*) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS check";
тем более я там перепутал, количество на сумму поделил.
Но, я конечно не ожидал, что вы мой код прямо так, не глядя, будете копипастить в рабочий проект.
Сергей Водаков, я уже пытался переделать так) тоже не работает
Fatal error: Uncaught Exception: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'check, (SELECT date_added FROM `oc_order` od WHERE od.customer_id = c.customer' at line 1
Error No: 1064
$sql = "SELECT *";
$sql .= ", (SELECT COUNT(*) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS orders_count";
$sql .= ", (SELECT SUM(total) FROM `oc_order` od WHERE od.customer_id = c.customer_id) AS orders_sum";
$sql .= ", (SELECT date_added FROM `oc_order` od WHERE od.customer_id = c.customer_id ORDER BY date_added DESC LIMIT 1) AS order_last";
$sql .= ", (SELECT date_added FROM `oc_order` od WHERE od.customer_id = c.customer_id ORDER BY date_added ASC LIMIT 1) AS order_first";
$sql .= ", CONCAT(c.firstname, ' ', c.lastname) AS name, cgd.name AS customer_group FROM oc_customer c LEFT JOIN oc_customer_group_description cgd ON (c.customer_group_id = cgd.customer_group_id) WHERE cgd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
Georgi, "для формирования списка клиентов под экспорт" - это ответ на другой вопрос: "зачем вообще я делаю запросы к БД?".
А мой вопрос звучал иначе.
Я считаю, что тут надо сделать 3 запроса:
1) SELECT COUNT(*)/SUM(total) ...
2) SELECT MAX(date_added) AS order_last, MIN(date_added) AS order_first ...
3) SELECT *, CONCAT(..) ...
А уже в вызывающем коде объединить результаты в целое. Кроме того, что этот код легче для восприятия, разница в потребляемых ресурсах ( в том числе машинном времени) должна быть заметной.
Предполагаю, что третий запрос был изначально, а потом уже в него напихали всякого. И напрашивается SELECT c.* в третьем запросе.