MySQL PŘIPOJIL tabulku, dotaz, který přidá Count() sloupec vrátí 1, kdy nula zápas

0

Otázka

SELECT sg.date, sg.groupName, sg.highlights, user.display_name as displayName,
        COUNT(*) as cmtcnt
        FROM `saved_groups` as sg
        LEFT JOIN `user` on user.email = sg.userName
        LEFT JOIN `user_comments` as uc on sg.groupName = uc.groupName
        GROUP BY sg.groupName

Mám dvě tabulky, saved_groups a user_comments a druhý řádek dotazu by měl (ano, to funguje), návrat navíc sloupec s počtem komentářů, spojené s každé skupiny.

Nicméně, když skupina nemá žádné komentáře s ním spojené, hrabě vrací 1 když to by měla vrátit nulu.

Jak to mohu opravit tento dotaz?

Zkoušel jsem: COUNT(*)-1 as cmtcnt - a, který vrátí nulu pro skupiny bez komentáře, ale také se vrací nesprávné číslo (-1) pro skupiny, které mají přidružené komentáře.

Také jsem se snažil: NULL(Count(*), 0) -- ale, že chyby s #1582 - Incorrect parameter count in the call to native function 'ISNULL'

Také jsem se snažil: COALESCE(COUNT(*), 0) as cmtcnt ... a to dělalo žádný rozdíl vůbec (vráceno 1 pro všechny skupiny s žádné připomínky, správný počet pro ostatní)

Návrhy?

count mariadb mysql sql
2021-11-22 15:25:44
2

Nejlepší odpověď

1

COUNT() agregační funkce se nikdy nevrátí null a COUNT(*) vždy vrátí hodnotu větší než 0 protože se to počítá všechny řádky sada výsledků.

Co chcete, je počítat řádky user_comments které odpovídají podmínkám v ON doložku, a můžete to udělat zadáním uvnitř závorky sloupec groupName:

COUNT(uc.groupName)

Tímto způsobem pouze nenulové řádky se budou počítat a vy můžete získat 0 pokud pro konkrétní sg.groupName není tam žádný odpovídající řádek v user_comments.

2021-11-22 15:33:39
1

Jste počítat všechny věci ze všech tabulek, když říkáte, count(*). Protože saved_groups má řádku, dostanete 1 vrátil, což je správné.

Co chcete, je pouze počet komentářů. Takže místo toho, COUNT(*) as cmtcnt byste měli použít COUNT(uc.*) as cmtcnt.

To říká dotazu pouze počet řádků z uc stolu.

2021-11-22 15:30:16

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................