获取会议的最新注册信息

时间:2018-06-24 21:56:14

标签: mysql sql

我想在下表中显示有关会议中最近2个注册的一些信息。例如,此表显示,最后一次注册是由John完成的,并且是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 :(得分:0)

如果您不跟踪创建注册的时间/日期,则将无法检索到它。

我建议按照以下方式做些事情:

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

,然后在创建注册时,应存储当前时间。然后,您应该能够在查询数据库时按该字段排序。另外,我建议在加入表时加入ID。当前,您正在执行交叉联接,这是表的笛卡尔积

users, participants, registration_types

这将创建无意义的数据,并占用不必要的空间。

答案 1 :(得分:0)

从您的预期结果来看,您似乎需要这样做。

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而不是逗号,条件为,的{​​{1}}是where的旧样式。