Just nu i M3-nätverket
Gå till innehåll

Count(*)


ÅsaSa

Rekommendera Poster

Hej

 

Jag håller på med en databas där man ska spara ner rapportsvar i form av 1 för Ja och 0 för Nej (svaren har tidigare skrivits in i Excel). Nu behöver jag en formel där jag kan räkna ut hur stor procent av svaren som är 1.

 

Enklast måste ju vara att räkna ut antal rader med 1 som svar:

Select count(s.svar)from tbl_svar s 
where s.svar='1' and s.projekt_nr=55  /* 18 rader*/

och dividera det med totala antalet rader:

Select count(s.svar)from tbl_svar s 
where s.projekt_nr=55 /* 27 */

 

Men hur sätter jag ihop dessa rader för att få procenten?

Följande ger korrekta poster, men hur gör jag uträkningen?

Select SUM(svar),Count(svar) FROM tbl_svar where projekt_nr=55

 

Mvh

Åsa

 

Länk till kommentar
Dela på andra webbplatser

Det låter som om det ges som ett heltal och inte som ett flyttal. Svaret är ju förmodligen mellan 0.0 och 1. SQL-tolken castar det till ett heltal så borde du få 0 i samtliga fall utom när alla har svarat "ja".

 

Nu tror jag inte MySQL skulle gjort sådär men om den gjorde det (eller gör det) så skulle man lösa det genom nåt i stil med följande:

 

Select CAST( SUM(svar) / Count(svar) as decimal(6,4)) FROM tbl_svar where projekt_nr=55

 

Exakt hur man gör är nog databas-beroende:

Om det är ett procent-tal du är ute efter kan du ju testa om det gör någon skillnad med:

 

Select 100*SUM(svar) / Count(svar) FROM tbl_svar where projekt_nr=55

 

då borde du få t.ex 40 direkt istället för 0.4, och det kanske ändå är vad du är ute efter?

 

 

Länk till kommentar
Dela på andra webbplatser

Det du får nu är heltalsdivision. Typ 34/55, vilket ger resulat som heltal, dvs 0.

 

För att få med decimalerna kan du helt enkelt multiplicera med 1.0 någonstans, typ:

 

select sum(s.svar)*1.0/count(*) from ...

 

Eller använda CAST, typ:

 

select cast(sum(s.svar) as float)/count(*) from ...

 

 

 

Länk till kommentar
Dela på andra webbplatser

Helt klart en trolig anledning att det blir en heltalsdivision. Jag tror det skulle hjälpa avsevärt om frågeställaren berättade vad hon kör för databashanterare för om det blir en heltalsdivision eller inte är relativt databasberoende.

 

Kör jag bara en "select 2/5;" på den mysql jag har på laptopen just nu så säger den 0.4 trots att det är heltal i både täljare och nämnare.

 

Men åter igen, om allt hon vill ha ut är ett procent-tal (för att skriva t.ex 34%) så borde en multiplikation av täljaren med 100 vara det enklaste, blir det heltalsdivision så slipper hon decimalerna.

 

Länk till kommentar
Dela på andra webbplatser

:-)

SQL är inte en databas, SQL är ett språk som används (med lite olika variationer) av i princip alla relationsdatabaser. Exempel på sådana är Oracle, Sybase, MS SQL Sever, Informix, DB/2, MySQL och PostgreSQL men det finns många fler.

 

Av någon anledning så verkar de flesta som tror att de kör databasen SQL vara användare av MS SQL Server, jag drar slutsatsen att så är fallet även här.

Eftersom alla har lite olika implementaioner är det oftast bra att veta vilken databas det handlar om när man ska svara på frågor.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...