2016-11-13 68 views
1
的平均数量

enter image description here使用SQL来计算客户

请参阅上面的数据结构。我试图写一个SQL查询来获取客户的平均数量为每个会话

我尝试:

select avg(A.NumberCustomer) 
from(
select SessionName, count(distinct customers.Idcustomer) as NumberCustomer, 
from customers, enrollments, sessions 
where customers.Idcustomer=enrollments.Idcustomer and enrollments.Idsession=sessions.Idsession 
group by sessions.SessionName 
) A 

但我似乎得到了来自客户,招生,课程线 不是错误肯定这一点,任何帮助表示赞赏。

感谢

+0

添加模式结构和某些转储数据 –

+0

这是一个可爱的图,但更多有用的将是一个模式和样本数据@NiranjanKumar提到 – e4c5

+0

有什么错误信息是什么呢?它更直接从数据库中获得更多帮助:)继续尝试! –

回答

3

你必须和额外的逗号,你应该删除:

select avg(A.NumberCustomer) 
from(
select SessionName, 
     count(distinct customers.Idcustomer) as NumberCustomer, #<--- here 
from customers, enrollments, sessions 
where customers.Idcustomer=enrollments.Idcustomer 
    and enrollments.Idsession=sessions.Idsession 
group by sessions.SessionName 
) A 

顺便说一句,我建议你移动到SQL'99连接语法可读性原因:

SELECT 
    avg(A.NumberCustomer) 
FROM (
    select 
     SessionName, 
     count(distinct customers.Idcustomer) as NumberCustomer 
    from customers 
    inner join enrollments 
     on customers.Idcustomer=enrollments.Idcustomer 
    inner join sessions 
     on enrollments.Idsession=sessions.Idsession 
    group by sessions.SessionName 
) A 

另外,关于问题的好图表,并记住下次包含错误消息。

+0

感谢这使得它的工作 - 只是不知道它是否真的生产我想要它做的,即获得平均没有。的客户在每场会议 – user33484

+0

不客气。我回答了你的两个问题:修正了错误和SQL来计算平均客户数量。 Fi你有新的要求可以自​​由地打开一个新的问题。不要忘记包含样本数据和预期数据。祝你好运! – danihp

+0

@ user33484根据你的模式,每个会话都有一个客户的数量,这意味着在这里没有平均值。你的意思是你想要所有会话中客户的平均数量,例如(会话1 - > 3客户),(会话2 - > 5客户),(会话3 - > 7客户)。 avg是avg(3,5,7)= 5? –

2

对于每个会话中的平均客户数量,您应该只能使用注册表。平均将入学的会话数除以数量:

select count(*)/count(distinct idSession) 
from enrollments e; 

此作以下假设:

  • 所有会议至少有一个客户(原始查询过这样的假设,以及)。
  • 没有客户多次为同一会话注册。