получить последние регистрации в конференции - PullRequest
0 голосов
/ 25 июня 2018

Я хочу показать некоторую информацию о последних 2 регистрациях в конференции в виде таблицы ниже.Эти таблицы показывают, например, что последняя регистрация была сделана Джоном и является регистрацией с 2 ​​участниками, и общая стоимость регистрации была 10,00.

User that did the registration | Quantity of participants registered | Total Value
            John                               2                        10.00$
            Jake                               1                        5.00$           

Знаете ли вы, как правильно добиться этого сSQL-запрос?Я тестирую вот так, но он не работает: 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

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Судя по ожидаемому результату, вам нужно поступить так.

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 |

Примечание:

  • Стандарт ANSI 92 join, поэтому используйте JOIN вместо запятой, , с условием where - это старый стиль join.
0 голосов
/ 25 июня 2018

Если вы не отслеживаете время / дату создания регистрации, вы не сможете ее получить.

Я бы предложил сделать что-то вроде этого:

CREATE TABLE registration_types (id int, name varchar(3),price double, conference_id int, date_created datetime);,

, а затем, когда вы создаете регистрацию, вы должны сохранить текущее время.После этого вы сможете упорядочить по этому полю при запросе базы данных.Кроме того, я бы рекомендовал присоединиться к идентификатору при объединении таблиц.В настоящее время вы выполняете перекрестное соединение, являющееся декартовым произведением таблиц

users, participants, registration_types.

Это создает бессмысленные данные и занимает больше места, чем необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...