2012-09-08 36 views
6

Tôi có hai truy vấn bên dưới, cả hai truy vấn đều được cấp từ cùng một bảng "trình phát". Tôi muốn chia truy vấn 1 theo truy vấn 2 để có được tỷ lệ phần trăm phù hợp. Im tương đối mới với các truy vấn SQL chi tiết hơn, cũng như đăng trên diễn đàn ... nhưng vui lòng cho tôi biết nếu bạn có bất kỳ đề xuất nào về cách kết hợp điều này để nhận được kết quả phần trăm có liên quan.SQL - Chia hai kết quả

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

Bạn đã có hai câu trả lời, mà tôi ngạc nhiên, bởi vì tôi don không hiểu câu hỏi. Bạn có muốn một số hoặc một số cho mỗi người chơi không? Nếu câu trả lời không phải là những gì bạn muốn, thì hãy thử bằng cách đăng một tập dữ liệu gốc từ bảng trình phát, tập kết quả mong đợi và giải thích về việc chuyển đổi. –

+0

@Rob van Wijk - xin lỗi vì sự thiếu rõ ràng. Tôi đang cố gắng để có được một số tổng số cho tất cả các cầu thủ kết hợp. có rất nhiều cột trong bảng "trình phát", nhưng các cột quan trọng ở đây là: 1) "create_dtime" là ngày mà người chơi cụ thể đã tạo tài khoản và 2) init d_time là ngày mới nhất cụ thể người chơi đã đăng nhập. Đối với tất cả người chơi trong một phạm vi ngày nhất định, tôi muốn chia truy vấn 1 (tất cả người chơi đang hoạt động trong 7 ngày qua, cho người dùng đã tạo tài khoản sau ngày 3/1/12) theo truy vấn 2 (tổng số người dùng đã tạo tài khoản sau khi 3/1/12) – Americo

Trả lời

4

Bạn chỉ có thể nói

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 

Các group by trong SQLs không cần thiết như bạn đang không thực sự nhóm bởi một cái gì đó. Ví dụ: group by hữu ích khi bạn cần tỷ lệ phần trăm theo trình phát. Sau đó, bạn sẽ nói group by player_id và trong select sẽ có player_id: EDIT

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

: Nếu các điều khoản mà là khác nhau:

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

Họ có các mệnh đề 'WHERE' khác nhau mặc dù –

+0

Mike - chính xác .. mặc dù eveything được cho ăn từ bảng người chơi, hai truy vấn được cấu trúc theo các tiêu chí khác nhau .. tôi có thể tự tay thực hiện 2 truy vấn và tự phân chia chúng, nhưng đâu là niềm vui trong đó !? Tôi nghĩ rằng tôi sẽ bắt đầu sử dụng diễn đàn này để thử và mở rộng tự động hóa của mình. – Americo

+0

@MichaelBerkowski Không nhận thấy điều đó. Sẽ cập nhật câu trả lời. – Nivas

Các vấn đề liên quan