sql >> Databasteknik >  >> RDS >> Mysql

mysql count fungerar inte korrekt?

Du måste lägga till alla kolumner du väljer i SELECT sats förutom c.USER_ID till GROUP BY klausul, så här:

group by c.ID, c.otherfields, l.title,..

EDIT: Jag tror att följande kommer att fungera korrekt:

SELECT count(c.USER_ID) as total_commments_user , 
       c.*, u.NAME, l.TITLE as LINK_TITLE, u.AUTH_IMG
FROM `PLD_COMMENT` c 
left outer join `PLD_USER` u ON (u.ID = c.USER_ID) 
left outer join `PLD_LINK` l ON (l.ID = c.ITEM_ID) 
group by c.ITEM_ID, c.USER_ID
ORDER BY c.USER_ID, l.ID 

Exempel: Om du har följande exempeldata:

  • PLD_LINK:

    ID   STATUS   TITLE    
    1      1      title1
    2      2      title2
    
  • PLD_USER:

    ID     NAME
    8    Mahmoud
    9     Ahmed
    
  • PLD_COMMENT:

    ID   ITEM_ID USER_ID   STATUS
    4      1        8        1
    5      1        8        1
    6      1        8        1
    7      2        8        2
    8      2        8        2
    9      1        9        1
    10     1        9        1
    

Fall 1:användaren Mahmoud visas två gånger:

Sedan kommer den föregående frågan att ge dig antalet kommentarer för varje användare och för varje objekt också, så här:

total_commments_user  ID  ITEM_ID   USER_ID   Name
         3            4      1         8     Mahmoud
         2            7      2         8     Mahmoud
         2            9      1         9      Ahmed

Lägg märke till att användaren Mahmoud visas två gånger med olika antal, eftersom han har olika Item_Id .

Fall 2:användaren Mahmoud visas endast en gång:

Om du vill få antalet kommentarer för varje användare för alla objekt behöver du bara gruppera efter USER_ID och du får:

total_commments_user  ID  ITEM_ID   USER_ID   Name  
         5            4      1         8     Mahmoud
         3            9      1         9      Ahmed

Som du kan se nu användaren Mahmoud visas bara en gång, eftersom vi har angett Item_Id .

Du kan sedan filtrera efter status eller vad som helst.



  1. Ändra tidszonskomponent i TIMESTAMP MED TIMEZONE i Oracle

  2. Postgres-funktionen skapar men körs inte

  3. Välj fråga men visa resultatet från post nummer 3

  4. Hur man ställer in statusfältsfärg i SSMS för olika SQL Server-instanser - SQL Server / TSQL självstudie del 6