2013-06-05 45 views
6

Tôi đang thực hiện GROUP BY và COUNT (*) trên tập dữ liệu và tôi muốn tính phần trăm của mỗi nhóm trong tổng số.Tính tỷ lệ phần trăm nhóm sử dụng GROUP BY

Ví dụ, trong truy vấn này, tôi muốn biết có bao nhiêu số lượng () cho mỗi tiểu bang đại diện cho trên tổng (select count () từ publicdata: samples.natality):

SELECT state, count(*) 
FROM [publicdata:samples.natality] 
GROUP by state 

Có một số cách để làm điều đó trong SQL, nhưng tôi đã không tìm thấy một cách để làm điều đó trong Bigquery, không ai biết?

Cảm ơn!

+1

Kiểm tra ratio_to_report, một trong những chức năng cửa sổ thời gian gần đây công bố (ví dụ như trong một câu trả lời) –

Trả lời

12

Kiểm tra ratio_to_report, một trong những chức năng cửa sổ thời gian gần đây công bố:

SELECT state, ratio * 100 AS percent FROM (
SELECT state, count(*) AS total, RATIO_TO_REPORT(total) OVER() AS ratio 
FROM [publicdata:samples.natality] 
GROUP by state 
) 

state percent 
AL  1.4201828131159113 
AK  0.23521048665998198 
AZ  1.3332896746620975 
AR  0.7709591206172346 
CA  10.008298605982642 
+0

Chỉ cần xem bài đăng từ hôm qua với các tính năng mới, đây chính xác là những gì tôi muốn, cảm ơn! – inaki

+0

Có cách nào để sử dụng ROUND với RATIO_TO_REPORT không? Hoặc sử dụng * 100 để tính tỷ lệ phần trăm? Tôi gặp lỗi Đã gặp phải "" OVER "" OVER "" ở dòng 1, cột 37. Đã được mong đợi: ")" – tinkerr

3

Bạn có thể tự tham gia vào tổng số, sử dụng giá trị giả làm khóa. Ví dụ:

SELECT 
    t1.state AS state, 
    t1.cnt AS cnt, 
    100 * t1.cnt/t2.total as percent 
FROM (
    SELECT 
    state, 
    COUNT(*) AS cnt, 
    1 AS key 
    FROM 
    [publicdata:samples.natality] 
    WHERE state is not null 
    GROUP BY 
    state) AS t1 
JOIN (
    SELECT 
    COUNT(*) AS total, 
    1 AS key 
    FROM 
    [publicdata:samples.natality]) AS t2 
ON t1.key = t2.key 
ORDER BY percent DESC 
+0

Rất cám ơn Jordan, đó là chính xác những gì tôi muốn! – inaki

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