Trước hết bạn cần biết rằng việc tạo một bảng tạm thời hoàn toàn là một giải pháp khả thi. Nhưng trong trường hợp không có lựa chọn nào khác có thể áp dụng được, điều này không đúng ở đây!
Trong trường hợp của bạn, bạn có thể dễ dàng tăng truy vấn của mình với tên FrankPl được chỉ ra bởi vì truy vấn phụ và truy vấn chính của bạn đều được nhóm theo cùng một trường. Vì vậy, bạn không cần bất kỳ truy vấn phụ nào. Tôi sẽ sao chép và dán giải pháp của FrankPl để hoàn thiện:
SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;
Tuy nhiên, điều đó không có nghĩa là không thể gặp một trường hợp mà bạn ước mình có thể lập chỉ mục một truy vấn phụ. Trong trường hợp bạn có hai lựa chọn, đầu tiên là sử dụng bảng tạm thời do chính bạn chỉ ra, giữ kết quả của truy vấn phụ. Giải pháp này có lợi vì nó được hỗ trợ bởi MySQL trong một thời gian dài. Nó chỉ là không khả thi nếu có một lượng lớn dữ liệu liên quan.
Giải pháp thứ hai là sử dụng MySQL phiên bản 5.6 trở lên . Trong các phiên bản gần đây của MySQL, các thuật toán mới được kết hợp nên một chỉ mục được xác định trên bảng được sử dụng trong truy vấn phụ cũng có thể được sử dụng bên ngoài truy vấn phụ.
[CẬP NHẬT]
Đối với phiên bản đã chỉnh sửa của câu hỏi, tôi muốn giới thiệu giải pháp sau:
SELECT o.property_B, SUM(IF(o.property_A = 'specific_A', o.score1, 0)), SUM(o.score2)
FROM o
GROUP BY property_B
HAVING SUM(IF(o.property_A = 'specific_A', o.score1, 0)) > 0;
Nhưng bạn cần làm việc trên HAVING
phần. Bạn có thể cần phải thay đổi nó tùy theo vấn đề thực tế của bạn.