|
|
|
|
|
для: oradev
(29.10.2007 в 09:52)
| | Спасибо теперь всё идеально=). Вопросов нету, хотя были - но уже проштудировал материал про устранение дублирования. | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 22:03)
| | Борис, ваш запрос:
SELECT u.name_surname,sum(o.value_paid)/count(distinct o2.id) AS sum_oplaty, count(DISTINCT o
.id) AS cn_order_paid,count(DISTINCT o2.id)AS cn_order
FROM users AS u LEFT JOIN orders AS o
ON (u.id = o.user_id AND o.value_paid = o.order_value)
LEFT JOIN
orders AS o2
ON (u.id = o2.user_id)
GROUP BY u.id,u.name_surname
HAVING sum_oplaty > 1000 and cn_order_paid > 1 and cn_order > 1;
|
Что не ясно, обращайтесь поясню. | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 22:03)
| | SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
GROUP BY u.id
HAVING order_paid>1
AND value_paid>1000
ORDER BY id DESC
проблема с условиями для sum, count решилась используя HAVING, осталось вытащить к-во сделанных заказов(не важно оплаченных или нет). | |
|
|
|
|
|
|
|
для: oradev
(28.10.2007 в 21:50)
| | 1) WHERE value_paid>1000 где общая сумма заказов пользователя больще 1000
2) WHERE order_paid>1 где к-во оплаченных заказов больше одного
3) WHERE order_count>1 где к-во заказов больше одного(не важно оплаченных или нет)
P.S (order_count ) не знаю как вытащить к-во заказов(не важно оплаченных или нет) в связке с оплаченной суммой пользователя и к-вом оплаченных заказов
P.P.S. Оффтоп, хотелось бы узнать название толкового туториала по SQL, MYSQL где теория подверждается примерами(кроме официально мануала), рыть гугл в решении данной задачи для меня гиблое дело..=(. | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 21:34)
| | Борис, все элементарно выполняется скажите условие
Что означает - где стоимость заказа конкретного! > 1000 для пользователя
или общая уже сумма заказов пользователя.
Скажите, как трактовать, я вам напишу запрос ! | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 21:17)
| | Также, если данный запрос возвращает верные данные
SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE value_paid>1000
GROUP BY u.id
ORDER BY id DESC
То следующий запрос возвращает ошибку:
SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE order_paid>1
GROUP BY u.id
ORDER BY id DESC
#1054 - Unknown column 'order_paid' in 'where clause' | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 20:46)
| | Хммм, теперь хочу получить помимо к-ва оплаченных заказов, к-во общих заказов не зависимо от o.value_paid = o.order_value, делаю дополнительную связь в итоге получается билиберда...
SELECT u .name_surname, sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_paid, count( o2.id ) AS order_count
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
LEFT JOIN orders AS o2 ON ( u.id = o2.user_id )
GROUP BY u.id
ORDER BY id DESC | |
|
|
|
|
|
|
|
для: oradev
(28.10.2007 в 19:31)
| | Да огромное спасибо, вот оно - именно то что я и искал, изящное решение в один запрос.
Но всё же интересно как решить предыдущую проблему, к чему необходимо привязать условие!?
SELECT u .name_surname , sum( ifnull( o.value_paid, 0 ) ) AS value_paid, count( o.id ) AS order_count
FROM users AS u
LEFT JOIN orders AS o ON ( u.id = o.user_id
AND o.value_paid = o.order_value )
WHERE o.value_paid >15000
GROUP BY u.id
ORDER BY order_count DESC
LIMIT 0 , 30 | |
|
|
|
|
|
|
|
для: Борис
(28.10.2007 в 19:10)
| | Борис, вы мой запрос запускали ? | |
|
|
|
|
|
|
|
для: oradev
(28.10.2007 в 10:49)
| | Так в догонку, решилась проблема с ORDER BY, далее при разработке возникла новая проблема. Если подставляю условие WHERE к подзапросу выдаётся ошибка. Как задать условие where к результатам подзапроса? Спасибо!
SELECT (
@this_id := users.id
) AS this_id, users . * ,
(
SELECT SUM( value_paid )
FROM orders
WHERE id = @this_id
) AS value_paid
FROM users
WHERE value_paid >=1000
ORDER BY id DESC
LIMIT 0 , 30 | |
|
|
|
|