2012-09-08 262 views
6

Tengo dos consultas a continuación, y ambas se están alimentando desde la misma tabla de "jugador". Quiero dividir la consulta 1 por la consulta 2 para obtener un porcentaje relevante. Soy relativamente nuevo en consultas SQL más detalladas, así como en publicaciones en foros ... pero por favor avíseme si tiene alguna sugerencia sobre cómo combinar esto para obtener el porcentaje de resultado relevante.SQL - Dividir dos resultados

Select 
    sysdate,sum(Count(init_dtime)) 
From Player p 
Where 
    Trunc(Init_Dtime) > Trunc(Sysdate) - 7 
    And Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
    and trunc(create_dtime) < to_date('2015-sep-9','yyyy-mon-dd') 
Group By Trunc(Init_Dtime) 
Order By Trunc(Init_Dtime) Asc 
Select 
    Sum(Count(Create_Dtime)) 
From Player P 
where 
    Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
    And Trunc(Create_Dtime) < To_Date('2015-sep-9','yyyy-mon-dd') 
Group By Trunc(create_Dtime) 
Order By Trunc(create_Dtime) Asc 
+1

usted ya tiene dos respuestas, lo que me sorprende, porque Don no entiendo la pregunta ¿Quieres un número o un número por jugador? Si las respuestas no son las que usted desea, intente publicar un conjunto de datos original de la tabla del jugador, un conjunto de resultados esperados y una explicación de la transformación. –

+0

@Rob van Wijk: disculpa por la falta de claridad. Estoy tratando de obtener un número total para todos los jugadores combinados. hay muchas columnas en la tabla "jugador", pero las que son importantes aquí son: 1) "create_dtime", que es la fecha en que un jugador específico hizo una cuenta y 2) init d_time, que es la última fecha que un específico el jugador ha iniciado sesión. Para todos los jugadores dentro de un cierto rango de fechas, quiero dividir la consulta 1 (todos los jugadores activos en los últimos 7 días, para los usuarios que crearon una cuenta después del 3/1/12) por la consulta 2 (total de usuarios que crearon una cuenta) después de 01/03/12) – Americo

Respuesta

4

Puede simplemente decir

select sysdate, 
     count((init_dtime))/sum((Create_Dtime)) * 100 as percentage 
    from Player p 
where Trunc(Init_Dtime) > Trunc(Sysdate) - 7 
    and Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
    and trunc(create_dtime) < to_date('2015-sep-9','yyyy-mon-dd') 
    order by percentage asc 

El group by en los LSQ no son necesarios ya que no están realmente agrupación por algo. group by es útil cuando necesita el porcentaje por jugador, por ejemplo. Entonces se podría decir group by player_id y en el select tendría la player_id: editar

select player_id, count(…) 
    from … 
where … 
group by player_id 

: Si las cláusulas donde son diferentes:

select sysdate, 
     (
      (select count((init_dtime)) 
      from player p 
      where trunc(Init_Dtime) > trunc(Sysdate) - 7 
       and Trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
       and trunc(create_dtime) < to_date('2015-sep-9','yyyy-mon-dd')) 
      /
      (select count((Create_Dtime)) 
       from player P 
      where trunc(Create_Dtime) >= To_Date('2012-mar-01','yyyy-mon-dd') 
       and trunc(Create_Dtime) < To_Date('2015-sep-9','yyyy-mon-dd')) 
     ) * 100 as percentage 
from dual 
+0

tienen diferentes 'WHERE' cláusulas embargo –

+0

Mike - exactamente .. aunque eveything es la alimentación de la mesa de jugador, los dos querys se estructuran en diferentes criteria..i donde puede simplemente tomar manualmente las 2 consultas y divídalos por mi cuenta, pero ¡¿dónde está la diversión en eso ?! Pensé que comenzaría a usar este foro para tratar de expandir mi automatización. – Americo

+0

@MichaelBerkowski No lo noté. Actualizará la respuesta. – Nivas

Cuestiones relacionadas