Pertama-tama Anda perlu tahu bahwa membuat tabel sementara benar-benar solusi yang layak. Tetapi dalam kasus tidak ada pilihan lain yang berlaku yang tidak benar di sini!
Dalam kasus Anda, Anda dapat dengan mudah meningkatkan kueri Anda sebagai FrankPl ditunjukkan karena sub-kueri dan kueri utama Anda dikelompokkan berdasarkan bidang yang sama. Jadi, Anda tidak memerlukan sub-kueri apa pun. Saya akan menyalin dan menempelkan solusi FrankPl demi kelengkapan:
SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;
Namun itu tidak berarti tidak mungkin menemukan skenario di mana Anda berharap dapat mengindeks sub-kueri. Dalam kasus mana Anda punya dua pilihan, pertama adalah menggunakan tabel sementara seperti yang Anda tunjukkan sendiri, memegang hasil sub-kueri. Solusi ini menguntungkan karena didukung oleh MySQL untuk waktu yang lama. Hanya saja tidak layak jika ada sejumlah besar data yang terlibat.
Solusi kedua adalah menggunakan MySQL versi 5.6 atau lebih tinggi . Dalam versi terbaru dari algoritma MySQL baru dimasukkan sehingga indeks yang ditentukan pada tabel yang digunakan dalam sub-kueri juga dapat digunakan di luar sub-kueri.
[PERBARUI]
Untuk versi pertanyaan yang diedit, saya akan merekomendasikan solusi berikut:
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;
Tetapi Anda harus mengerjakan HAVING
bagian. Anda mungkin perlu mengubahnya sesuai dengan masalah Anda yang sebenarnya.