webForumDet fria alternativet

Addera ihop samma kolumn från flera poster?

Databaser & SQL

12 svar · 430 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

Hej, hur kan jag addera ihop flera kolumner från flera poster.

Ex

Tabell 1 (bara för att visa hur det är tänkt)
n_id
n_Namn

Tabell 2 (Den som innehåller den kolumnen jag vill addera med sig själv)
id
n_id
poäng

Då vill jag addera alla poäng fält med varandra där t.ex. n_id = 1. Någon som har något förslag

Medlem sedan juni 200032 967 inlägg
#2

Om som vanligt; ange dbms så man vet vad man har att utgå ifrån.

Medlem sedan dec. 200012 464 inlägg
#3
select n_Namn, sum(poäng)
from t1 inner join t2 on t1.n_id = t2.n_id
group by n_namn
Medlem sedan aug. 20003 575 inlägg
#4

@nders skrev:

Om som vanligt; ange dbms så man vet vad man har att utgå ifrån.

Dem vanligaste kommandona som Sum(), join osv borde väl stödjas av de flesta dbms så jag tänkte inte det behövdes än då det inte är riktigt bestämt vilken dbms som skall användas. Men skall tänka på det nästa gång.

LarsG skrev:

select n_Namn, sum(poäng)
from t1 inner join t2 on t1.n_id = t2.n_id
group by n_namn

Tack skall genast testa.

Medlem sedan juni 200032 967 inlägg
#5

Det är sant att sum() och liknande funktioner är standard. Men det som gör att det skulle vara bra att veta vilken dbms som används är det bästa svar som kan levereras är det som du fått av LarsG, som fungerar, men inte är komplett.

LarsGs exempel fungerar så länge det finns minst en post i tabell2 där som motsvarar sökt n_id. Finns det inte det, så får du inget tillbaka. Då får man använda en INNER JOIN istället, och får du ingen träff så kan det hända att du får null i resultat från SUM(). Hur ska detta hanteras? (här vore det bra att veta dbms).

Det är alltid intressant att veta vilken dbms som används, för att kunna ge ett så komplett svar som möjligt.

Medlem sedan aug. 20003 575 inlägg
#6

@nders skrev:

Det är sant att sum() och liknande funktioner är standard. Men det som gör att det skulle vara bra att veta vilken dbms som används är det bästa svar som kan levereras är det som du fått av LarsG, som fungerar, men inte är komplett.

LarsGs exempel fungerar så länge det finns minst en post i tabell2 där som motsvarar sökt n_id. Finns det inte det, så får du inget tillbaka. Då får man använda en INNER JOIN istället, och får du ingen träff så kan det hända att du får null i resultat från SUM(). Hur ska detta hanteras? (här vore det bra att veta dbms).

Det är alltid intressant att veta vilken dbms som används, för att kunna ge ett så komplett svar som möjligt.

Japp, den informationen om vilken dbms det skall vara kan inte bli överflödig. Men som sagt det är inte bestämt än så än så länge måste det vara generella sql argument som skall skapas.

Kanske skulle skrivit att det finns någon bestämd dbms.

Medlem sedan juni 200032 967 inlägg
#7

Ska det vara generellt så får du nog skriva det som en LEFT JOIN istället för en INNER, och sedan hantera eventullt NULL-svar från SUM() i applikationen.

Medlem sedan aug. 20003 575 inlägg
#8

@nders skrev:

Ska det vara generellt så får du nog skriva det som en LEFT JOIN istället för en INNER, och sedan hantera eventullt NULL-svar från SUM() i applikationen.

Okej, tackar.

Synd att man inte kan acceptera båda två svaren.

Medlem sedan juni 200032 967 inlägg
#9

Notera att jag skrev nog. ;)

Lycka till!
mvh

Medlem sedan dec. 1999707 inlägg
#10

Finns isnull() i mySql?

select
    n_Namn, 
    sum(isnull(poäng,0))
from 
    t1 
    left outer join
    t2 
    on 
    t1.n_id = t2.n_id
group by 
    n_namn
Medlem sedan juni 200032 967 inlägg
#11

IsNull() finns i MySQL, men fungerar inte på samma sätt som i exempelvis T-SQL. Funktionen ser ut att likna IsNull() i VB.

mysql.com skrev:

ISNULL(expr)
If expr is NULL, ISNULL() returns 1, otherwise it returns 0.

Medlem sedan aug. 20003 575 inlägg
#12

Jag har en liten följd fråga. Jag skulle vilja sortera posterna. Samt ta ut mer data från Tabellerna än n_name samt och det ihopräknade.

1. Jag skulle vilja sortera efter det ihopräknade så jag testade sum(poäng) as poang, och sedan order by poang.
Men det gillade den inte hur jag än gjorde. Vad kan jag ha gjort fel. Eller man kanske inte kan ha order by när man haft group by?

2. Jag vill ha ut mer data som finns i tabell t1 än bara n_name. Men då får jag ett felmeddelande t.ex. "You tried to execute a query that does not include the specified expression 'p_id' as part of an aggregate function".

Hur gör jag för att kunna ha med mer data från dom andra kolumnerna i databasen?

Jag testar på en Ms Access databas just nu.

Medlem sedan juni 200032 967 inlägg
#13
  1. I Access kan man inte sortera efter ett alias, utan du måste ange ordningsnummer. Om Sum() är det femte fältet / värdet i din select-lista, så skriver du ORDER BY 5.

  2. När man använder funktioner såsom sum(), max(), etc, måste alla vanliga fält i selectlistan också ingå i group by.

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)