2011-10-05 38 views
5

Dưới đây là các truy vấn:Tính phần trăm trong SQLite

select 
(
SELECT  COUNT(*) 
FROM   Sending s 
WHERE  (ConfID = 1) AND (Status = 1) 
) 
/
(
(
SELECT  COUNT(*) 
FROM   Numbers 
WHERE  (ConfID = 1) 
) 
/
100 
) 

tôi muốn để tính phần trăm. Ví dụ, nếu truy vấn

SELECT  COUNT(*) 
    FROM   Numbers 
    WHERE  (ConfID = 1) 

cho 100 và một trong những khác

SELECT  COUNT(*) 
    FROM   Sending s 
    WHERE  (ConfID = 1) AND (Status = 1) 

quả 50 truy vấn kết quả sẽ trả về 50, có nghĩa là 50%. Nhưng là kết quả truy vấn đầu tiên với 2 và thứ hai trả về 10000 kết quả truy vấn trả về 0. Tôi nghĩ rằng tôi nên xác định bằng cách nào đó để trả lại số phao hoặc như vậy.

Cảm ơn!

+1

Bạn thử (100 * FIRST_QUERY)/SECOND_QUERY? –

+0

@Laurent 'Isn't '(100 * FIRST_QUERY)/SECOND_QUERY' giống với' (FIRST_QUERY)/(SECOND_QUERY/100) '? –

+1

@Benoit Tôi biết, hãy nhìn vào câu trả lời của tôi. Đề nghị của Laurent cũng không có tác dụng (xem câu trả lời của EmptyStack và bình luận của OP). Quan điểm của tôi là: ngay cả khi đề nghị của Laurent đã làm việc, nó sẽ gây hiểu nhầm. Đừng làm lại bài toán của bạn để thử và đánh lừa các loại dữ liệu. Thay vào đó, hãy làm việc với đúng loại dữ liệu. –

Trả lời

7

Hãy thử chia cho 100.0 thay vì 100. Điều đó sẽ buộc một diễn viên để nổi kiểu dữ liệu điểm:

select 
(
SELECT  COUNT(*) 
FROM   Sending s 
WHERE  (ConfID = 1) AND (Status = 1) 
) 
/
(
(
SELECT  COUNT(*) 
FROM   Numbers 
WHERE  (ConfID = 1) 
) 
/
100.0 
) 
+0

Kim cương! Rõ ràng là tôi cần! Cám ơn rất nhiều! – kseen

0

Hãy thử:

SELECT SUM(CASE status WHEN 1 THEN 100 ELSE 0 END)/COUNT(*) 
    FROM numbers 
WHERE confid = 1 
+1

Đây cũng là ý tưởng ban đầu của tôi, vấn đề là OP đang chọn từ 2 bảng khác nhau –

+0

Bạn đã tổng hợp 100s. Tuy nhiên, phân chia kết quả của bạn sẽ là '200/10000 = 0,02' trong phân chia số nguyên sẽ làm tròn thành' 0'. Bạn cần tổng hợp '100.0' –

+0

@Adrian: ngoại trừ nếu tôi muốn một giá trị làm tròn thành số nguyên (thường thì đây là đủ phản hồi cho người dùng). Nếu không, bạn đã đúng! – Benoit

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