Just nu i M3-nätverket
Jump to content

Count(*)


ÅsaSa

Recommended Posts

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

 

Link to comment
Share on other sites

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?

 

 

Link to comment
Share on other sites

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 ...

 

 

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

:-)

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...