Permalänk
Medlem

SQL - Count

Hej,
Går det att få 2 kolumner som visar antal per frukt?
Behöver separera det som visas för frukt, just nu visar den totalt för båda under samma kolumn 3 och 4.
Kolumn 1 = Datum
Kolumn 2 = Lastbil
Kolumn 3 = Antal Bananer
Kolumn 4 = Antal Apelsiner

SELECT
Datum, Lastbil,
count(Frukt) as Banan,
count(Frukt) as Apelsin
FROM TabellA
inner join TabellB
on
TabellA.x = TabellB.x
where
Frukt = 'Banan'
or
Frukt = 'Apelsin'
group by Datum, Lastbil

Tack på förhand

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Hur ser din databas ut? Vilka tabeller finns?

Visa signatur

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkärlek för tysk tjejpop.

Permalänk
Medlem

Kanske med två joins istället?

Permalänk
Medlem
Skrivet av HappySatan:

Hur ser din databas ut? Vilka tabeller finns?

Det finns massa annat som inte har data eller är skräp info.
Ena tabellen har Datum och Lastbil, och den andra har Frukt, gemensamma är X.

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem
Skrivet av Pake:

Kanske med två joins istället?

Ja, prova två left joins, en per frukt.

Permalänk
Medlem

Borde väl gå att göra något i stil med SELECT..., SUM(IF(frukt = 'banan', 1, 0)) as banan

Referenser:
https://mariadb.com/kb/en/sum/
https://mariadb.com/kb/en/if-function/

Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Asus Xonar DX | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk
Medlem

Låter som en skoluppgift och därmed får du inte en lösning utan endast hänvisning åt vad du ska kolla närmare på.

Permalänk
Medlem

Ingen skoluppgift.
Har bytt namn på kolumnerna för att underlätta för er att förstå vad jag menar.

Tack, ska testa.

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Testa med count case typ såhär:
(Med reservation att jag inte vet exakt hur tabellerna ser ut)

SELECT
a.datum,
a.lastbil,
COUNT(CASE WHEN b.frukt = 'Banan' THEN 1 END) as Banan,
COUNT(CASE WHEN b.frukt = 'Apelsin' THEN 1 END) as Apelsin
FROM TabellA a
INNER JOIN TabellB b on a.x = b.x
WHERE
b.frukt = 'Banan' OR b.frukt = 'Apelsin'
group by
Datum,
Lastbil;

Permalänk
Avstängd

Jag fattar inte riktigt vad du har i respektive tabell, men du kan ju använda group by:

CREATE TABLE #frukter (Lastbil VARCHAR(10), AntalFrukt INT, Frukt VARCHAR(10)) INSERT #frukter VALUES ('Bil1', 1, 'Banan'), ('Bil2', 2, 'Banan'), ('Bil3', 1, 'Banan'), ('Bil4', 5, 'Banan'), ('Bil1', 1, 'Apelsin'), ('Bil2', 3, 'Apelsin'), ('Bil3', 2, 'Apelsin'), ('Bil4', 1, 'Apelsin'), ('Bil1', 2, 'Persika') SELECT Frukt, SUM(AntalFrukt) AS SummaFrukter FROM #frukter GROUP BY Frukt DROP TABLE #frukter --Resultat: --Frukt SummaFrukter --Apelsin 7 --Banan 9 --Persika 2