sql >> Databasteknik >  >> RDS >> Mysql

mysql:select max(score) returnerar inte relevant raddata

Du använder MAX , som är en aggregerad funktion. Aggregatfunktioner har effekten av att behandla flera rader i tabellen som en grupp. Om du inte gör något speciellt kommer alla rader i hela tabellen att användas som en stor grupp, och när en aggregeringsfunktion som MAX finns där, kommer alla dessa rader att kondenseras till bara en sammanlagd rad. Den kondenserande effekten skulle även ha inträffat för andra aggregatfunktioner som MIN , SUM , GROUP_CONCAT och vänner (se:http://dev. mysql.com/doc/refman/5.1/en/group-by-functions.html ). Du kan också tillämpa specifika grupperingar med GROUP BY konstruktion, men om du inte gör det kommer förekomsten av den aggregerade funktionen bara att samla alla rader i en rad (men denna hopsamling sker efter tillämpning av WHERE skick, så bara de filtrerade raderna aggregeras)

Nu, på grund av denna kondenserande eller "reducerande" effekt av aggregerade funktioner, finns det något sätt att göra ett värde av många värden. För MAX , det sättet är att bara lista det maximala värdet som hittades för alla instanser av uttrycket du skickade som argument till MAX . Men dina andra kolumner har inte en sådan aggregerad funktion. För de flesta databasprodukter förekommer både oaggregerade och aggregerade kolumner i SELECT listan skulle vara ett fel. Men MySQL beter sig fel/annorlunda och returnerar bara ett av de tillgängliga värdena för varje icke-aggregerat uttryck som anges i SELECT bit. Vilket värde är upp till mysql - du kan inte lita på någon speciell algoritm.

I många fall vill folk göra något med "vilken rad som har det maximala värdet", med andra ord, hitta raden som har maximalt värde som värde, men använd de andra kolumnerna från den raden oaggregerade. Lösningen som tillhandahålls av middaparka gör det, och det finns andra sätt att uppnå det också (googla efter MySQL gruppvis maximalt). För mer allmän information om aggregerade funktioner och relaterade GROUP BY klausul, du kan ta en titt på -skamlös selfplug- min artikel här:http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html



  1. Använd SET TEXTSIZE för att begränsa data som returneras för varje rad i SQL Server

  2. Jag kan inte hitta my.cnf på min Windows-dator

  3. Hur hämtar jag kommentaren från en PostgreSQL-databas?

  4. Ändra en inloggnings standardspråk i SQL Server