webForumDet fria alternativet
Logga in / Bli medlem

Multippla MAX i en fråga

Databaser & SQL

6 svar · 233 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Trådstart#1

Jag behöver få ut en urlen till en bild ur en databas. Har en sida där man kan rösta på bilder. Hur får jag ut den som är mest populär.

Tänker mig att man kan använda "MAX(vote) as [max_vote]...
Jag får dock inte till det när jag ska använda flera max i samma fråga.

Sorteringen ska vara följande:

  1. MAX(vote) as [max_vote]
  2. MAX(vote_times) as [max_vote_times]
  3. MAX(file_view_number) as [max_file_views]

Sedan spelar det inte någon roll om det finns flera bilder som matchar, bara jag får ut en av dessa.

Kan man skriva något liknande:

sql = "SELECT MAX(vote) as [max_vote], MAX(vote_times) as [max_vote_times], MAX(file_view_number) as [max_file_view_times], file_name FROM T_picture_stats WHERE name = 'Mattias Nordin"

Microsoft JET Database Engine error '80040e21'

You tried to execute a query that does not include the specified expression 'file_name' as part of an aggregate function.

/tab_top_list/show_top_list.asp, line 135

Medlem sedan maj 20012 080 inlägg
#2

Varför göra det svårt när man kan göra det på annat sätt?

sql = "SELECT TOP 1 * FROM T_picture_stats WHERE name = 'Mattias' ORDER BY vote DESC, vote_times DESC, file_view_number DESC"
Medlem sedan mars 20034 471 inlägg
#3

Re: Multippla MAX i en fråga

mattiasnordin skrev:

.... Kan man skriva något liknande:

sql="SELECT MAX(vote) as [max_vote], 
MAX(vote_times) as [max_vote_times], 
MAX(file_view_number) as [max_file_view_times], file_name 
FROM T_picture_stats WHERE name = 'Mattias Nordin"

Om du vill ha ut värdena så bort med [, ]. Alltså:

SELECT MAX(vote) as max_vote, 
MAX(vote_times) as max_vote_times, 
MAX(file_view_number) as max_file_view_times, file_name 
FROM T_picture_stats WHERE name = 'Mattias Nordin'

Du verkar sakna den stängande ':n efter Nordin också. Först stängs strängen med ', sedan SQL-uttrycket med ".

Medlem sedan juni 200032 967 inlägg
#4

Använder man dylika funktioner i sin SQL-fråga måste man ha med alla andra fält i GROUP BY-instruktionen i frågan.

Mvh

Medlem sedan maj 20012 080 inlägg
#5

Vad menas med "group by" ?

Medlem sedan dec. 20003 887 inlägg
#6

GROUP BY är en sorts DISTINCT lite enkelt beskrivet. De fält du anger i GROUP BY kommer att göra så att din SELECT endast återger ett resultat per de fält som har samma värden... tänk att du har en tabell med följande värden

[u]intA[/u]   [u]intB[/u]   [u]intC[/u]
   1      1      1
   1      1      2
   2      1      3
   2      1      3
   2      2      4
   2      2      4
   2      2      5

Då kommer

SELECT intA, intB, intC FROM tabell GROUP BY intA, intB, intC

att ge dig resultatet

[u]intA[/u]   [u]intB[/u]   [u]intC[/u]
   1      1      1
   1      1      2
   2      1      3
   2      2      4
   2      2      5

Så din fråga skulle kunna se ut så här

SELECT Max(vote) AS max_vote, Max(vote_times) AS max_vote_times, Max(file_view_number) AS max_file_view_times, file_name
FROM T_picture_stats
WHERE name = 'Mattias Nordin'
GROUP BY file_name

För varje fält du vill ha ut i din SELECT måste du ange detta fält i GROUP BY delen också.

Medlem sedan maj 20012 080 inlägg
#7

Tack. Fint forum det här !!!

412 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
154 ms — deklarationer (db)
122 ms — hämta statistik (db)
133 ms — hämta tråd, inlägg och bilagor (db)
150 ms — ändringar (db)