Permalänk
Medlem

SQL distinct

Hej!

Har en fråga på en SQL-sats jag inte riktigt får till. Har googlat men har inte riktigt fått klarhet i om jag måste köra två separata satser eller om man kan bunta ihop till en fråga.
Det skulle underlätta mycket om det räcker med en fråga.

om jag har tre kolumner med lagerplatser och order tex.

order lager1 lager2
10 X 2
10 X 3
10 X 2
10 X 1
10 X 2

kör jag en select distinct på övre frågan får jag ju
order lager1 lager2
10 X 2
10 X 3
10 X 1

Men hur jag jag om jag vill komplettera frågan med en count där det står
order lager1 lager2 antal
10 X 2 3
10 X 3 1
10 X 1 1

Jag kan lösa det med två separata frågor, select distinct order,lager1,lager2 where order=10
och en select count(distinct...

Visa signatur

K#

Permalänk
Medlem

SELECT "order", lager1, lager2, COUNT(lager2) AS antal FROM foo
GROUP BY lager2

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack som fan.

Works as intended.

Visa signatur

K#

Permalänk
Medlem

Teknocide:
Group By borde väl behöva gruppera på båda lagren?
"SELECT *,COUNT(*) FROM mytable GROUP BY lager1,lager2"

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem
Skrivet av Zevon:

Teknocide:
Group By borde väl behöva gruppera på båda lagren?
"SELECT *,COUNT(*) FROM mytable GROUP BY lager1,lager2"

Rätta mig gärna om jag har fel, men det går inte att gruppera på bägge lager. lager1 är helt passivt i denna query, skulle man räkna förekomsterna på bägge så hade cellerna i en rad inte längre haft någon samhörighet.

Databasen skulle må bra av normalisering där lager blir en egen entitet, men om detta inte går att ordna verkar queryn jag skrev fungera.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

yes, jag lade till group by lager1, lager2 sen funkade det.
Antog att det inte köra group by på ena bara, men såpass är jag med.

Visa signatur

K#

Permalänk
Medlem

Det stämmer inte helt. Vad har du för värden i lager1-kolumnen? Om kolumnen inte ska tas med i beräkningen så bör du utesluta dem ur select-satsen.

Vi låtsas att tabellen "foo" innehåller dessa värden:

order lager1 lager2 10 1 2 10 1 3 10 2 2 10 3 1 10 3 2

Vad får vi för resultat av SELECT *, COUNT(*) FROM foo GROUP BY lager1, lager2?

order lager1 lager2 COUNT(*) 10 1 2 1 10 1 3 1 10 2 1 1 10 2 2 1 10 3 2 1

Lager1 bör inte vara med i queryn alls, om dess värde ändå inte spelar någon roll (vilket jag antar att det inte gör då OPs exempel har X i den kolumnen)
Satsen SELECT "order", lager2, COUNT(*) as antal FROM foo GROUP BY lager2 borde ge rätt resultat.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Japp, den sista frågan gör exakt det den ska.
Har en kompletterande grej. om jag har en order=20 på med samma lager1 och lager2 information så skall inte visas (20 kan betyda en utleverans).
Googlar jag på exempel får man mest fundamentala basic-exempel.

Någon som har någon bra bok att rekommendera i ämnet?

Visa signatur

K#