|
|
|
| Здравствуйте.
Подскажите, как составить запрос: есть две таблицы -
1. 2.
Users Orders
--------- -----------
id id
name users_id
amount
|
с такими данными:
Users Orders
--------- -----------
1 1
Вася 1
--------- 300.00
2 -----------
Петя и т. д. 2
2
450.00
----------
3
2
1000.00 и т. д
|
Нужно выводить отсортированный список пользователей по кол-ву совершенных покупок.
Петя
Вася
и т. д. | |
|
|
|
|
|
|
|
для: name
(02.10.2006 в 20:33)
| | Можно поступить следующим образом
SELECT Users.name, COUNT(Orders.id) AS cnt
FROM Users LEFT JOIN Orders
ON Users.id = Orders.users_id
GROUP BY Users.id
ORDER BY cnt DESC
|
| |
|
|
|
|
|
|
|
для: cheops
(03.10.2006 в 00:47)
| | Спасибо!
А вы не могли бы объяснить принцип работы данного запроса? | |
|
|
|
|
|
|
|
для: cheops
(03.10.2006 в 00:47)
| | Мы извлекаем данные из таблиц Users и Orders (FROM Users LEFT JOIN Orders) при условии равенства Users.id = Orders.users_id. LEFT JOIN требует выводить все значения Users, даже если клиент не совершал ещё ни одной покупки и условие Users.id = Orders.users_id для него выполняться не может. Конструкция GROUP BY Users.id группирует данные по полю Users.id, это означает, что в результирующей таблице будет ровно столько записей, сколько уникальных значений поля id в таблице Users, а функция COUNT() будет подсчитывать поличество полей Orders.id, которые принадлежат Users.id. Для удобства, конструкции COUNT(Orders.id) мы назначаем псевдоним cnt при помощи оператора AS. Теперь мы можем обращаться к результату возвращаемому функцией по имени cnt. Так, конструкция ORDER BY cnt DESC сортрирует в обратном порядке результат выборке по этому полю. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2006 в 16:25)
| | БОЛЬШОЕ СПАСИБО! | |
|
|
|