Đầu tiên, bạn đang lưu trữ tất cả JSON trong một hàng, nếu bạn muốn truy vấn dữ liệu như thế này, mỗi cư dân nên có hàng riêng JSON của riêng mình:
*other_fields*, {"A": 1, "B": "Debra", "C": "Peters", "D": "[email protected]", "E": "Female", "F": "Tsagaan-Ovoo"}
*other_fields*, {"A": 2, "B": "Marc", "C": "Rasmussen", "D": "[email protected]", "E": "Male", "F": "Copenhagen"}
Thứ hai, bạn không cần phải đếm dữ liệu được trích xuất, bạn chỉ cần đếm các hàng cho mỗi quốc gia được trích xuất. Điều này sẽ thực hiện:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Thứ ba, bạn không muốn GROUP BY data
vì điều này có lẽ là duy nhất cho mỗi cư dân. Điều này sẽ để lại cho bạn một nhóm cho mỗi hàng. Tôi nghĩ bạn chỉ muốn:
GROUP BY country
Kết hợp tất cả lại với nhau:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Để có hiệu suất tốt, bạn có thể cân nhắc đặt chỉ mục phụ trên quốc gia được trích xuất .. xem DOCS