---
title: "SQL-beräkning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/190654-sql-beräkning"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "SoulGod"
published: "2012-11-16T12:24:59.000Z"
updated: "2012-11-18T15:21:47.000Z"
replies: 5
views: 1003
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/190654-sql-beräkning"
---

# SQL-beräkning

## #1 — SoulGod, 2012-11-16T12:24Z

Jag har en databas som ser ut såhär:
id - namn - link - sex - lag - bp - ml

bp & ml innehåller siffror som jag vill använda i en beräkning.
Dock blir mina uträkningar i PHP ganska avancerade, och jag undrar därför:

Finns det stöd i MySQL i att den kan beräkna saker direkt i systemet? (utan extern koppling).

Det jag "hoppas" på är att kunna göra en till kolumn som heter "total" och "snitt"... Och att total automatiskt lägger ihop bp + ml ..
Och att snitt då tar total / 2 ..

Går det?

Permalänk: https://www.webforum.nu/p/190654

## #2 — @nders, 2012-11-16T12:29Z

```
select id, namn, link, sex, lag, bp, ml, bp+ml as total, (bp+ml)/2 as snitt
from tabell
group by id, namn, link, sex, lag, bp, ml
```

Edit: för inte menar du att du vill lagra de uträknade värdena direkt i tabellen? I så fall borde du använda triggers för update och insert.

Permalänk: https://www.webforum.nu/p/2306091

## #3 — SoulGod, 2012-11-16T12:35Z

Jag vet inte vad som blir bäst ...
Mitt problem är att jag kommer behöva göra en himla massa uträkningar..

SELECT bp FROM \`wp_rvb\` WHERE \`sex\` = "K"
Addera ihop alla dessa världen och sedan dela med numsql_rows för ovan SELECT-sats..

Och det blir totalt 4 varianter av just denna SELECT-sats.. 
Aldrig använt triggers / update / insert .. så det känns svårt :P

Permalänk: https://www.webforum.nu/p/2306092

## #4 — @nders, 2012-11-16T13:05Z

Du förklarar lite dåligt, tror jag.  :)

Det är klart att du kan göra allt i SQL - men risken är att det blir onödigt svårt och oöverblickbart. Är det det här du ska göra, som du beskriver i ditt senaste inlägg, så ska du inte fundera på triggers.

Du kan göra det med subqueries, men det är inte så übersexigt.

```
SELECT bp, 
	(SELECT sum(bp) FROM wp_rvb WHERE sex = 'K') as totalt,
	(SELECT avg(bp) FROM wp_rvb WHERE sex = 'K') as snitt
FROM wp_rvb WHERE sex = 'K'
```

Permalänk: https://www.webforum.nu/p/2306093

## #5 — SoulGod, 2012-11-16T13:26Z

Ja - det är jag nog ..
Det jag är ute efter är att få ut 4 stycken olika uträkningar.

Uträkning 1:
SELECT bp FROM wp_rvb WHERE sex = 'K' ..
Addera ihop alla summor från bp, dela med antalet rader och sedan visa upp det..

Uträkning 2:
SELECT ml FROM wp_rvb WHERE sex = 'K' ..
Addera ihop alla summor från ml, dela med antalet rader och sedan visa upp det..

Uträkning 3:
SELECT bp FROM wp_rvb WHERE sex = 'T' ..
Addera ihop alla summor från bp, dela med antalet rader och sedan visa upp det..

Uträkning 4:
SELECT ml FROM wp_rvb WHERE sex = 'T' ..
Addera ihop alla summor från ml, dela med antalet rader och sedan visa upp det..

Den koden jag kör just nu (för att uthämta grunden är)

```
<?PHP
global $wpdb;
 
	$sql_bp_k = "SELECT bp FROM `wp_rvb` WHERE `sex` = 'K'";
 	$comments = $wpdb->get_results($sql_bp_k);

 	echo  $wpdb->num_rows . 'Rows Found';
	
 	foreach ($comments as $comment) {
 	echo $comment->bp;
 	echo " / ";
	}
?>
```

Jag har nu gjort separata länkar till allting, så det är "fult" löst ..
Dock... hur frågar jag ut servern efter snittvärdet?
Säg som sagt att jag har kolumnerna id - namn - link - sex - lag - bp - ml
...

jag vill hämta ut de 10 bästa (med högst snittvärde på bp & ml).
Så..
SELECT \* FROM wp_rvb ORDER BY (snittvärdet av bp&ml ihop) LIMIT 10
....

Permalänk: https://www.webforum.nu/p/2306094

## #6 — aasah, 2012-11-18T15:21Z

```
SELECT
   sex,
   Avg(bp) [BpMedel],
   Avg(ml) [MlMedel]
FROM
   wp_rvb
GROUP BY
   sex
```

Ger en rad per sex med medelvärdena för bp och ml. Borde fixa problem 1-4.

> **SoulGod skrev:**
>
> jag vill hämta ut de 10 bästa (med högst snittvärde på bp & ml).
> Så..
> SELECT \* FROM wp_rvb ORDER BY (snittvärdet av bp&ml ihop) LIMIT 10
> ....

Om du kan tänka dig att få ut en extra kolumn i resultatet med sorteringsvärdet så borde du kunna fixa detta i en enda fråga. Annars måste du eventuellt mellanlagra ovanstående i en temp-tabell först innan du ordnar om resultatet, men i princip:

```
SELECT
   sex,
   Avg(bp) [BpMedel],
   Avg(ml) [MlMedel],
   Avg(bp) + Avg(ml) [SortKol]
FROM
   wp_rvb
GROUP BY
   sex
ORDER BY
   Avg(bp) + Avg(ml) DESC
LIMIT 10
```

Det är också möjligt att du kan ordna raderna efter denna summa utan att plocka ut den under SELECT.

Permalänk: https://www.webforum.nu/p/2306149

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/190654-sql-beräkning
