Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  20 2804
Jeg har en tabell med tre kolonner, K1, K2 og count(K3).

- Hver K1 inneholder flere forskjellige K2 eks. K1 = {10}, 10.K2 = {20,30,40}
- Hver K2 har igjen flere forskjellige count(K3) verdier

Enda mer forklaring, jeg har følgende setning:
select K1, K2, count(K3)
from tabell
group by K1, K2;

Jeg vil ha den K2 kolonnen som har minst count(K3) verdi per K1

eks:
K1 | K2 | count(K3)
10 | 20 | 10
50 | 20 | 5
20 | 10 | 10
90 | 10 | 5

der count(K3) = 10 er den minste verdien når K1 = 10

Endring
- Hver K2 har kun en count(K3) verdi
Sist endret av wareye; 19. oktober 2013 kl. 22:10.
Når du sier kolonne her, mener du egentlig rad? Altså at du vil ha K2-verdien fra den raden der K3 er minst?
Trådstarter
Sitat av Yochi Vis innlegg
Når du sier kolonne her, mener du egentlig rad? Altså at du vil ha K2-verdien fra den raden der K3 er minst?
Vis hele sitatet...
Sorry, men ja det er det jeg vil
Hva med "SELECT * FROM tabell ORDER BY K3 ASC LIMIT 1"?
Sikkerhetsklarert
Jeg blir forvirret av måten du skriver dette på (no offence, det er sent.)
Hvordan inneholder hvert felt flere verdier av det forrige feltet ? Du skriver at K2 inneholder flere verdier av K3. I det ene eksemplet ditt har du en kommaseparert liste. Er det slik du har dataene lagret i tabellen? Eller var det for å lage et eksempel?
Kanskje du kan skrive litt mer om hva disse verdiene faktisk er, og hvordan de inneholder en eller flere verdier av hverandre.

Uansett, jeg regner med at du er kjent med MIN() ? Som vil finne minste verdien av en gruppe.

Select MIN(k2) from table group by ...

http://www.tizag.com/mysqlTutorial/mysqlmin.php
Sist endret av Pjukern; 20. oktober 2013 kl. 00:49.
Trådstarter
Sitat av Yochi Vis innlegg
Hva med "SELECT * FROM tabell ORDER BY K3 ASC LIMIT 1"?
Vis hele sitatet...
Jeg vil finne den minste verdien av K2 til hver K1 og ikke bare en av dem

Sitat av Pjukern Vis innlegg
Uansett, jeg regner med at du er kjent med MIN() ? Som vil finne minste verdien av en gruppe.

Select MIN(k2) from table group by ...
Vis hele sitatet...
Når jeg prøver min(count(K3)) i select setningen får jeg feilmeldingen ERROR: aggregate function calls cannot be nested
Sikkerhetsklarert
Sitat av wareye Vis innlegg
Jeg vil finne den minste verdien av K2 til hver K1 og ikke bare en av dem
Vis hele sitatet...
Jeg detter helt av lasset her, du har jo kun ett K2 felt pr rad, du har også kun ett K1 felt pr rad. Det vil aldri være noen mulighet å kunne gjøre logikk på kryss av forskjellige rader, med mindre du også legger til et nytt felt som er unikt pr rad (id, autoincrement)

Sitat av wareye Vis innlegg
Når jeg prøver min(count(K3)) i select setningen får jeg feilmeldingen ERROR: aggregate function calls cannot be nested
Vis hele sitatet...
Hva er hele queryen din? Er har du en nestet spørring? (inner/outer join?)
Sist endret av Pjukern; 20. oktober 2013 kl. 00:56.
Trådstarter
En instans av K1 inneholder flere K2 verdier. K2 har igjen en og kun en K3 verdi. La oss si at hvis K1 = {10} så er K2 = {20, 30, 40}. K2 = {20} har den minste count(K3) verdien så jeg vil skrive ut K2 = {20}.

select K1, K2, min(count(K3))
from Tabell
group by K1, K2
order by K1 ASC;
er det jeg prøver å kjøre
Jeg slenger meg på -gjengen her...

http://www.w3schools.com/sql/

Beklager, men jeg forstår rett og slett ikke måten tabellen(e) dine er satt opp på...
Sitat av wareye Vis innlegg
En instans av K1 inneholder flere K2 verdier. K2 har igjen en og kun en K3 verdi. La oss si at hvis K1 = {10} så er K2 = {20, 30, 40}. K2 = {20} har den minste count(K3) verdien så jeg vil skrive ut K2 = {20}.
Vis hele sitatet...

Hvorfor har K2 = {20} den minste count(K3) verdien? Hvor får du dette fra?

Etter å ha brukt en del tid på å tenke gjennom dette er jeg nysgjerrig på hva du egentlig mener. Du forklarer vanvittig dårlig, no offense ^^


Skal sette opp en eksempel-tabell på hvordan jeg har forstått deg, men dette blir litt gjetning..
Eksempelvis(tallene jeg bruker er absolutt tilfeldige):

K1 K2 K3
10 20 10
10 30 15
10 60 5
20 40 25
20 25 20
20 50 30

Dersom K1 er 10, vil dette trigge flere verdier i K2. For hver av verdiene K2 har(eller kan ha?), trigger dette enda en egen verdi til K3. Du er ute etter den K2'n som trigger laveste verdi til K3?

Kanskje jeg forklarer akkurat like dårlig her. Er jeg på sporet av noe?
Du vil altså printe K2 = {60} i dette tilfellet? Når blir i så fall K1 relevant for spørsmålet ditt?

edit: Leser igjennom posten min nå, for et sirkus. Hurra om dette gir mening for noen!
Sist endret av enanthate; 20. oktober 2013 kl. 02:43.
Sitat av enanthate Vis innlegg
Hvorfor har K2 = {20} den minste count(K3) verdien? Hvor får du dette fra?

Etter å ha brukt en del tid på å tenke gjennom dette er jeg nysgjerrig på hva du egentlig mener. Du forklarer vanvittig dårlig, no offense ^^


Skal sette opp en eksempel-tabell på hvordan jeg har forstått deg, men dette blir litt gjetning..
Eksempelvis(tallene jeg bruker er absolutt tilfeldige):

K1 K2 K3
10 20 10
10 30 15
10 60 5
20 40 25
20 25 20
20 50 30

Dersom K1 er 10, vil dette trigge flere verdier i K2. For hver av verdiene K2 har(eller kan ha?), trigger dette enda en egen verdi til K3. Du er ute etter den K2'n som trigger laveste verdi til K3?

Kanskje jeg forklarer akkurat like dårlig her. Er jeg på sporet av noe?
Du vil altså printe K2 = {60} i dette tilfellet? Når blir i så fall K1 relevant for spørsmålet ditt?

edit: Leser igjennom posten min nå, for et sirkus. Hurra om dette gir mening for noen!
Vis hele sitatet...
Haha!

Jeg forsto i alle fall hva du var ute etter og hvorfor det ble 60 her.. man skal være rimelig god tankeleser for å forstå hva TS spør om...

Et greit utgangspunkt hadde vært en eller flere tabeller med verdier.. det kan se ut som om TS har brukt én tabell der det burde vært brukt flere, for øvrig...
Sikkerhetsklarert
Sitat av wareye Vis innlegg
En instans av K1 inneholder flere K2 verdier. K2 har igjen en og kun en K3 verdi. La oss si at hvis K1 = {10} så er K2 = {20, 30, 40}. K2 = {20} har den minste count(K3) verdien så jeg vil skrive ut K2 = {20}.

select K1, K2, min(count(K3))
from Tabell
group by K1, K2
order by K1 ASC;
er det jeg prøver å kjøre
Vis hele sitatet...
Hvordan gir du k2 {10,20,30}? Dette er ikke gyldig syntax, er hva er datatypen i databasen din for dette feltet? Eller legger du inn en ekstra rad for hver k2 verdi?
Det høres ikke ut som optimalt på noen måte. Du bør/MÅ få med en unik verdi for hver rad også.

Kan du legge ut en reell dump av tabellen din her? Som jeg nevnte tidligere også, forklar gjerne hva disse tallene representerer og hva du ønsker oppnå, kanskje finnes det helt andre fremgangsmåter å gjøre det på.

Sitat av phish Vis innlegg
Et greit utgangspunkt hadde vært en eller flere tabeller med verdier.. det kan se ut som om TS har brukt én tabell der det burde vært brukt flere, for øvrig...
Vis hele sitatet...
Jeg begynner også å tenke litt i de baner.
Trådstarter
Sitat av enanthate Vis innlegg

K1 K2 K3
10 20 10
10 30 15
10 60 5
20 40 25
20 25 20
20 50 30

Dersom K1 er 10, vil dette trigge flere verdier i K2. For hver av verdiene K2 har(eller kan ha?), trigger dette enda en egen verdi til K3. Du er ute etter den K2'n som trigger laveste verdi til K3?

Kanskje jeg forklarer akkurat like dårlig her. Er jeg på sporet av noe?
Du vil altså printe K2 = {60} i dette tilfellet? Når blir i så fall K1 relevant for spørsmålet ditt?
Vis hele sitatet...
Ja jeg vil printe ut K2 = 60, men jeg vil også printe ut K2 = 25, altså den nye tabellen skal se slik ut:

K1 K2 K3
10 60 5
20 25 20

Unnskyld hvis jeg skaper masse forvirringer her, men jeg er ganske ny til SQL og er ikke helt klar over alle begrepene...
Sist endret av wareye; 20. oktober 2013 kl. 12:25.
Høres for meg ut som tabellen din ikke er opprettet på en optimal måte. Forklar oss heller hvilke data denne tabellen inneholder, og hva den er ment for. Mye lettere å hjelpe da.
Sitat av raze Vis innlegg
Høres for meg ut som tabellen din ikke er opprettet på en optimal måte. Forklar oss heller hvilke data denne tabellen inneholder, og hva den er ment for. Mye lettere å hjelpe da.
Vis hele sitatet...
Ja, virker som om det er her ting må taes tak i...

Det vanlige er at du har flere tabeller som har en unik identifier som knytter den til en annen tabell

f.eks tabell "kunder" der alle kunder har en kundeID, navn etc.
Så har du en tabell som heter "handler" der hver handel har en unik handelsID, og også et felt som heter KundeID. Når man da skal velge en handel utført av kunde x kjører man en spørring på de to tabellene

"SELECT * FROM kunder JOIN handler ON kunder.kundeID = x and handler.kundeID = x

Jeg har ikke drevet med SQL på årevis selv, så det er godt mulig at det er en feil og dårlig spørring, men poenget er at du må sette opp et "design" av databasen først og fremst.

http://sqlmag.com/site-files/sqlmag.com/files/archive/sqlmag.com/content/content/9709/figure_01.gif

Hvis ikke databasen din ligner noenlunde på det her er du sannsynligvis på ville veier og bør ta tak der i stedet for å fokusere på spørringer... Lag et slikt kart med felter i hver tabell og relasjoner (for eksempel kan en kunde ha mange handler, mens hver handel kun kan ha en kunde, en-til-mange og en-til-en-relasjoner).

Hvis du vil ha videre hjelp må du nesten poste en grafisk fremstilling av tabellene dine og relasjonene... og det er slik du går frem for å designe en database, så det er like greit å starte i rett ende...
Sist endret av phish; 22. oktober 2013 kl. 05:57.
Sitat av wareye Vis innlegg
Ja jeg vil printe ut K2 = 60, men jeg vil også printe ut K2 = 25, altså den nye tabellen skal se slik ut:

K1 K2 K3
10 60 5
20 25 20

Unnskyld hvis jeg skaper masse forvirringer her, men jeg er ganske ny til SQL og er ikke helt klar over alle begrepene...
Vis hele sitatet...
Benytter du PHP? Om du gjør det så kan disse sjekkene utføres på serversiden, og man kan hente ut den ønskede dataen her.

Om du benytter PHP så kan jeg sette opp en kodesnutt som rydder opp og henter ut den ønskede dataen slik du har skrevet over at du ønsker det.
Er dette for vanskelig å forstå da?
(har ikke rukket å lese utviklingen i tråden, svarer bare på første post)

SELECT k1, k2, COUNT(k3) FROM tbl GROUP BY k1, k2 ORDER BY COUNT(k3) DESC
Sist endret av Jannis!; 22. oktober 2013 kl. 12:23.
Sikkerhetsklarert
Sitat av Jannis! Vis innlegg
Er dette for vanskelig å forstå da?
(har ikke rukket å lese utviklingen i tråden, svarer bare på første post)

SELECT k1, k2, COUNT(k3) FROM tbl GROUP BY k1, k2 ORDER BY COUNT(k3) DESC
Vis hele sitatet...

Han vil ha K2 fra den raden der K3 er minst. Altså en spørring som hvor radene i result er hentet fra forskjellige rader i den opprinnelige tabellen.
Sitat av Pjukern Vis innlegg
Han vil ha K2 fra den raden der K3 er minst. Altså en spørring som hvor radene i result er hentet fra forskjellige rader i den opprinnelige tabellen.
Vis hele sitatet...
EDIT: Trudde du skrev til meg, men ser nå at det var til Pjukern
Sist endret av andrew92; 22. oktober 2013 kl. 13:23.
Sitat av wareye Vis innlegg
Ja jeg vil printe ut K2 = 60, men jeg vil også printe ut K2 = 25, altså den nye tabellen skal se slik ut:

K1 K2 K3
10 60 5
20 25 20

Unnskyld hvis jeg skaper masse forvirringer her, men jeg er ganske ny til SQL og er ikke helt klar over alle begrepene...
Vis hele sitatet...
Aha! Har gått og grublet på hva i all verden du ville. Du er ikke flink til å forklare, for å si det mildt.

For hver unike K1, velg raden med lavest K3 og returner hele denne raden (K1,K2,K3).

Såvidt jeg kan se er ingen av svarene her riktige, og jeg har ikke fått det til selv enda. Morsom liten utfordring dog.

Her:

SELECT K1,K2,min(K3) FROM FISK GROUP BY K1;

Kode

CREATE TABLE FISK(K1 int, K2 int, K3 int);
INSERT INTO Fisk VALUES(10, 20, 10);
INSERT INTO Fisk VALUES(10, 30, 15);
INSERT INTO Fisk VALUES(10, 60, 5);
INSERT INTO Fisk VALUES(20, 40, 25);
INSERT INTO Fisk VALUES(20 ,25 ,20);
INSERT INTO Fisk VALUES(20, 50, 30);

SELECT K1,K2,min(K3) FROM FISK GROUP BY K1;

"10","60","5"
"20","25","20"
(om den posten ser rar ut er det fordi der er to (vel, nå tre) poster satt sammen)
Sist endret av DumDiDum; 22. oktober 2013 kl. 13:40.
Jeg la til noen flere verdier, for slik jeg forstod det så kunne du ha mer enn bare 10 og 20 i K1 feltet, og mengden rader for hver unik K1 kan være utallige.

Jeg har nå satt opp en php kode som jeg er rimelig sikker henter ut den dataen du ønsker. Det var vel i utgangspunktet ikke en php kode du ønsket, men mer enn dette kan jeg ikke bistå med.

Jeg la til noen ekstra verdier i tabellen for å demonstrere at scriptet fungerer, og slik ser tabellen min ut nå:
http://al-projects.com/k1k2k3.png

Resultatet jeg sitter igjen med er følgende:
http://al-projects.com/k1k2k3_tabell.png

PHP scriptet har jeg lagt ut her:
http://pastebin.com/nLVVPJgA

Kortet ned antall linjer litt i denne koden (slo i sammen to if spørringer).

http://pastebin.com/rqv5j8KG
Sist endret av andrew92; 22. oktober 2013 kl. 17:33.