Vinnaren i pepparkakshustävlingen!
2009-12-13, 15:59
  #1
Medlem
Har en tabell med siffror. Vill veta hur många i % av siffrorna som är högre än 7. Har försökt komma en bit på vägen genom att leta upp hur många rader det blir över 7 samt hur många rader det är totalt. Genom att dividera dessa borde man få det i %. Någon som vill hjälpa mig vidare? Kan inte ha två Select till att börja med...

Hittar alla som har högre än 7:
Kod:
Select COUNT(betyg) as tmp from laser where betyg > 7

Hur många det är totalt:

Kod:
Select COUNT(betyg) as tmp from laser

Så om det totalt är 10 betyg och 5 st är högre än 7 så ska 50% lagras/skrivas ut någonstans.

Gäller MS SQL
Citera
2009-12-13, 19:10
  #2
Moderator
Protons avatar
Såhär kanske?

Kod:
SELECT (tmp.over/tmp.total)*100 AS value FROM(
SELECT COUNT(betyg) AS over FROM laser WHERE betyg 7,
SELECT COUNT(betyg) AS total FROM laser) AS tmp 
Citera
2009-12-13, 19:35
  #3
Medlem
Eller utan subselects:
Kod:
SELECT
   count(nullif(betyg > 7, false)) / cast(count(betyg) as float) * 100
FROM
   laser;
Citera
2009-12-13, 19:44
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av aidsbarn
Eller utan subselects:
Kod:
SELECT
   count(nullif(betyg > 7, false)) / cast(count(betyg) as float) * 100
FROM
   laser;
Funkar den där som den ska är det ju en elegantare lösning tycker iaf jag
Citera
2009-12-13, 21:22
  #5
Medlem
desmoduss avatar
Citat:
Ursprungligen postat av aidsbarn
Eller utan subselects:
Kod:
SELECT
   count(nullif(betyg > 7, false)) / cast(count(betyg) as float) * 100
FROM
   laser;


Kommer inte att funka vad jag kan se.

Nullif() kan såvitt jag vet inte ha den typen av expressions som parametrar. Dessutom finns inte false som ett reserverat ord i MS SQL.

Tanken är rätt dock, det här borde funka:

Kod:
SELECT SUM(case when betyg 7 then 1 else 0 end) / cast(count(betyg) as float) * 100
FROM laser 
Citera
2009-12-14, 08:21
  #6
Medlem
Citat:
Ursprungligen postat av desmodus
Kommer inte att funka vad jag kan se.

Nullif() kan såvitt jag vet inte ha den typen av expressions som parametrar. Dessutom finns inte false som ett reserverat ord i MS SQL.

Tanken är rätt dock, det här borde funka:

Kod:
SELECT SUM(case when betyg 7 then 1 else 0 end) / cast(count(betyg) as float) * 100
FROM laser 

Detta var faktiskt den enda jag fick att fungera, kan ifs vara en ngt litet då jag bara kopierade och körde.

Kod:
SELECT SUM(case when betyg > 7 then 1 else 0 end) / cast(count(betyg) as float) * 100
FROM laser

vad betyder det fetmarkerade. Första gången jag ser det.
Citera
2009-12-14, 11:21
  #7
Medlem
desmoduss avatar
Citat:
Ursprungligen postat av _x3m_
vad betyder det fetmarkerade. Första gången jag ser det.

Jag såg inte din fetmarkering förrän jag kollade i quote-taggen. Det är en case-sats. Om betyg > 7 så ge 1 annars 0. Den kommer att köras för varje rad som select returnerar och Sum() summerar helt enkelt alla ettor och nollor som case returnerar.
Citera
2009-12-16, 14:20
  #8
Medlem
Citat:
Ursprungligen postat av desmodus
Kommer inte att funka vad jag kan se.

Nullif() kan såvitt jag vet inte ha den typen av expressions som parametrar. Dessutom finns inte false som ett reserverat ord i MS SQL.

Tanken är rätt dock, det här borde funka:

Kod:
SELECT SUM(case when betyg 7 then 1 else 0 end) / cast(count(betyg) as float) * 100
FROM laser 

Provade att modifiera koden till:

Kod:
SELECT SUM(case when betyg > 7 and kurser = 'Kurs1' then 1 else 0 end) / cast(count(betyg) as float) * 100 
FROM laser

För att välja alla betyg som är högre än 7 och där kolumnen kurser innehåller "kurs1" (Dvs vill bara få inkludera dem i kurs1). Dock blir inte % rätt när jag lägger till

Kod:
and kurser = 'Kurs1' 
Citera
2009-12-16, 16:22
  #9
Medlem
desmoduss avatar
Citat:
Ursprungligen postat av _x3m_
Provade att modifiera koden till:

Kod:
SELECT SUM(case when betyg > 7 and kurser = 'Kurs1' then 1 else 0 end) / cast(count(betyg) as float) * 100 
FROM laser

För att välja alla betyg som är högre än 7 och där kolumnen kurser innehåller "kurs1" (Dvs vill bara få inkludera dem i kurs1). Dock blir inte % rätt när jag lägger till

Kod:
and kurser = 'Kurs1' 

Jodå, procenten blir rätt - men kanske inte den avsedda. Frågan du nu har efterfrågar hur stor andel av samtliga betyg som är över 7 och tillhör kurs1.

Om du vill veta hur stor andel av betygen i kurs1 som är över 7, så måste du filtrera hela frågan - inte bara en av kolumnerna. T.ex med en where-sats.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback