Problem:
vill multiplicera värden från två kolumner i en tabell.
Exempel:
Vår databas har en tabell som heter purchase
med data i följande kolumner:id
, name
, price
, quantity
och discount_id
.
id | namn | pris | kvantitet | rabatt_id |
---|---|---|---|---|
1 | penna | 7 | 3 | 1 |
2 | anteckningsbok | 5 | 8 | 2 |
3 | gummi | 11 | 3 | 1 |
4 | pennfodral | 24 | 2 | 3 |
Låt oss multiplicera priset med antalet produkter för att ta reda på hur mycket du betalade för varje vara i din beställning.
Lösning:
SELECT name, price*quantity AS total_price FROM purchase;
Den här frågan returnerar poster med produktens namn och dess totala pris:
namn | total_price |
---|---|
penna | 21 |
anteckningsbok | 40 |
gummi | 33 |
pennfodral | 48 |
Diskussion:
Behöver du välja namnet på varje post (i vårt fall name
) och beräkna resultatet av att multiplicera en numerisk kolumn med en annan (price
och quantity
)? Allt du behöver göra är att använda multiplikationsoperatorn (*) mellan de två multiplikatkolumnerna (price
* quantity
) i en enkel SELECT
fråga. Du kan ge detta resultat ett alias med AS
nyckelord; i vårt exempel gav vi multiplikationskolumnen ett alias för total_price
.
Observera att du även kan använda data från två kolumner som kommer från olika tabeller. Vi har en annan tabell i vår databas som heter discount
som har kolumner med namnet id
och value
; den senare representerar den procentuella rabatten på varan med angivet ID.
id | värde |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
Titta på exemplet nedan.
Lösning:
SELECT p.name, p.price*p.quantity*(100-d.value)/100 AS total_price FROM purchase p JOIN discount d ON d.id=p.discount_id;
Här är resultatet:
namn | total_price |
---|---|
penna | 18.90 |
anteckningsbok | 32.00 |
gummi | 29.70 |
pennfodral | 33.60 |
Som du kan se är det ganska enkelt att multiplicera värden från olika sammanfogade tabeller. I vårt exempel ovan multiplicerade vi priset för varje produkt med dess kvantitet från en tabell (purchase
) och multiplicerade sedan detta totala pris med den procentuella rabatten med discount
bord.