Я хочу показать некоторую информацию о последних двух регистрациях в конференции в таблице, как показано ниже. В этих таблицах, например, показано, что последняя регистрация была сделана Джоном и является регистрацией с 2 участниками, а общая стоимость регистрации - 10.00.
User that did the registration | Quantity of participants registered | Total Value
John 2 10.00$
Jake 1 5.00$
Вы знаете, как правильно достичь этого с помощью SQL-запроса? Im тестирует это, но не работает: http://www.sqlfiddle.com/#!9/225d82.
select users.name,
count(participants.registration_id),
sum(registration_types.price)
from
users,
participants,
registration_types
Group by(users.name)
Запрос возвращается:
name count(participants.registration_id) sum(registration_types.price
Jake 8 80
John 8 80
Но он должен вернуться:
name count(participants.registration_id) sum(registration_types.price
Jake 3 30
John 1 10
Структура таблиц, имеющих отношение к вопросу:
У меня есть таблица участников, в которой хранятся все участники конференции:
id registration_id registration_type_id name
1 1 1 Jake
2 1 1 Jane
3 1 2 Paul
4 2 2 Ben
В таблице регистрации хранятся все записи:
id status conference_id user_that_did_registration
1 incomplete 1 1 (User with id 1 did the registration in the conference with id 1)
2 incomplete 1 2
В таблице типов регистрации хранятся типы регистрации:
id name price conference_id
1 rtype1 5.00 1
2 rype2 10.00 1
Таблица пользователей
id name
1 John
2 Jake
Из вашего ожидаемого результата вам, похоже, нужно это сделать.
SELECT u.name,COUNT(pp.registration_id),SUM(rt.price)
FROM registration_types rt
INNER JOIN participants pp on pp.registration_id = rt.id
INNER JOIN users u on u.id = pp.registration_id
group by u.name
sqlfiddle: http://www.sqlfiddle.com/#!9/d28adf/8
[Результаты]:
| name | COUNT(pp.registration_id) | SUM(rt.price) |
|------|---------------------------|---------------|
| Jake | 3 | 30 |
| John | 1 | 10 |
Замечания:
join
, поэтому использовать JOIN
вместо запятой, ,
с where
условие старый стиль join
.registration_id
означает зарегистрированный идентификатор пользователя
Если вы не отслеживаете время/дату создания регистрации, вы не сможете ее восстановить.
Я бы предложил сделать что-то в этом направлении:
CREATE TABLE registration_types (id int, name varchar(3),price double, conference_id int, date_created datetime);
,
а затем, когда вы создаете регистрацию, вы должны сохранить текущее время. Затем вы можете заказать это поле при запросе базы данных. Кроме того, я бы рекомендовал присоединиться к ID при подключении к таблицам. В настоящее время вы выполняете кросс-соединение, которое является декартовым произведением таблиц
users, participants, registration_types
.
Это создает бессмысленные данные и занимает больше места, чем это необходимо.