Rumah > pangkalan data > tutorial mysql > Mengapa SQL COUNT(*) Saya Mengembalikan Jumlah Daripada Kiraan Baris Individu?

Mengapa SQL COUNT(*) Saya Mengembalikan Jumlah Daripada Kiraan Baris Individu?

Susan Sarandon
Lepaskan: 2025-01-18 05:41:09
asal
920 orang telah melayarinya

Why Does My SQL COUNT(*) Return the Total Instead of Individual Row Counts?

Pertanyaan SQL mengembalikan jumlah bilangan baris dan bukannya kiraan baris individu

Apabila melaksanakan pertanyaan SQL, pastikan anda menggunakan fungsi agregat seperti COUNT(*) dengan betul untuk mengelakkan hasil yang salah. Pertimbangkan pernyataan berikut:

<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura`
FROM (
    SELECT DISTINCT *
    FROM messages m
    INNER JOIN
    (
        SELECT Friend2 AS Friend FROM friends WHERE Friend1 = '1'
        UNION ALL
        SELECT Friend1 AS Friend FROM friends WHERE Friend2 = '1'
    ) friends ON m.Poster = friends.`Friend`
    UNION ALL
    SELECT DISTINCT *, '1'
    FROM messages
    WHERE `Poster` = '1'
) var
LEFT JOIN
(
    SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura`
    FROM messages_aura
) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)
GROUP BY `ID`, `Poster`
ORDER BY `Time` DESC
LIMIT 10;</code>
Salin selepas log masuk

Matlamat pertanyaan ini adalah untuk menanyakan data daripada jadual messages dan messages_aura dan mengira bilangan kemunculan mesej aura untuk setiap pengguna. Walau bagaimanapun, masalahnya ialah dalam subkueri LEFT JOIN, di mana klausa GROUP BY tiada.

Masalah: Tanpa klausa GROUP BY, subkueri akan mengembalikan jumlah bilangan mesej aura untuk semua pengguna dan bukannya mengira nombor untuk setiap pengguna. Akibatnya, output menunjukkan kiraan yang salah kerana ia mengagregatkan semua baris dan bukannya mengumpulkan mengikut lajur yang berkaitan.

Penyelesaian: Untuk menyelesaikan masalah ini, klausa GROUP BY mesti ditambah pada subkueri LEFT JOIN:

<code class="language-sql">LEFT JOIN
(
    SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura`
    FROM messages_aura
    GROUP BY AuraID, AuraStatus
) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
Salin selepas log masuk

Dengan menambahkan GROUP BY AuraID, AuraStatus, subkueri kini mengumpulkan hasil mengikut lajur ini, memastikan kiraan aura untuk setiap pengguna adalah tepat.

Atas ialah kandungan terperinci Mengapa SQL COUNT(*) Saya Mengembalikan Jumlah Daripada Kiraan Baris Individu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan