Given:SQL truy vấn phân phối tần số để đếm dãy với nhóm-by và bao gồm 0 đếm
table 'thing':
age
---
3.4
3.4
10.1
40
45
49
Tôi muốn đếm số thứ cho mỗi khoảng 10 năm, ví dụ:
age_range | count
----------+-------
0 | 2
10| 1
20| 0
30| 0
40| 3
truy vấn này đến gần:
SELECT FLOOR(age/10) as age_range, COUNT(*)
FROM thing
GROUP BY FLOOR(age/10) ORDER BY FLOOR(age/10);
Output:
age_range | count
-----------+-------
0 | 1
1 | 2
4 | 3
Tuy nhiên, nó không hiển thị cho tôi phạm vi có 0 lần đếm. Làm thế nào tôi có thể sửa đổi truy vấn để nó cũng hiển thị các phạm vi ở giữa với 0 đếm?
Tôi đã tìm thấy các câu hỏi xếp chồng tương tự cho các phạm vi đếm, một số cho 0 đếm, nhưng chúng liên quan đến việc chỉ định từng phạm vi (mã hóa cứng phạm vi vào truy vấn hoặc đặt phạm vi trong bảng). Tôi muốn sử dụng truy vấn chung như trên ở đây tôi không phải chỉ định rõ từng phạm vi (ví dụ: 0-10, 10-20, 20-30, ...). Tôi đang sử dụng PostgreSQL 9.1.3.
Có cách nào để sửa đổi truy vấn đơn giản ở trên để bao gồm 0 lần đếm không?
tương tự:
Oracle: how to "group by" over a range?
Get frequency distribution of a decimal range in MySQL
Đó là tốt đẹp. Chức năng tốt để biết. – Glenn
Câu trả lời thanh lịch, @mu_is_too_short! Tôi đã thử và nó đã hoạt động. Chỉ cần những gì tôi đang tìm kiếm. Cảm ơn! –
@Glenn: Yeah, 'generate_series' rất hữu ích, nó cũng có thể hoạt động với dấu thời gian để tạm biệt các bảng lịch. –