steen-h Juniormester
04. august 2016 - 07:50 Der er 8 kommentarer og
3 løsninger

select fra 2 tabeller med count og group

Jeg laver et udtræk fra 2 tabeller

SELECT  WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) AS valg  ,
(SELECT sum(`forandring`)  FROM `veight_1`  WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt1,
(SELECT sum(`forandring`)  FROM `veight_2`  WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt2
FROM `veight_2` AS a WHERE 1
GROUP BY valg
ORDER BY valg ASC


Det virker fint nok bortset fra at uge 53 kommer til sidst, den vil jeg gerne have som start.

valg vaegt1     vaegt2    
1     -0.45     -0.14
2     -0.67     -0.33
3     -0.40     0.09
4     -0.51     -2.01
5     -0.63     -0.38
6     -0.47     -0.48
7     -0.10     0.03
8     -1.23     -1.23
9     -0.39     -0.32
10     -0.90     -0.45
11     -0.88     -0.98
12     -0.97     -0.53



Hvis jeg skriver ORDER BY dato

GROUP BY valg
ORDER BY dato ASC


Får jeg uge 6 først og uge 10 og 11 kommer senere

valg     vaegt1     vaegt2    
6     -0.47     -0.48
7     -0.10     0.03
8     -1.23     -1.23
9     -0.39     -0.32
12     -0.97     -0.53


Hvordan løser jeg problemet ?
steen-h Juniormester
04. august 2016 - 07:56 #1
Jeg har et andet kald hvor jeg kun henter fra en tabel, der kan jeg godt sortere efter dato så uge 53 kommer først.

SELECT WEEKOFYEAR(DATE( FROM_UNIXTIME(dato))) AS valg , sum(forandring) AS antal FROM `veight_1` WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' group by valg ORDER BY dato ASC


valg     antal     
53     -0.29
1     -0.45
2     -0.67
3     -0.40
4     -0.51
5     -0.63
6     -0.47
7     -0.10
Rune1983 Guru
04. august 2016 - 08:21 #2
Ved ikke om jeg har forstået det rigtigt. Men hvis du vil have ændre ORDER BY så den fungere modsat kan det gøres sådan her.

ORDER BY valg ASC
Laves om til
ORDER BY valg DESC

Anden metode kunne også være at anvende
ORDER BY FIELD(valg,'53') ASC
Mener det burde vise noget ala
53
1
2
3
4
...
ORDER BY FIELD(valg,'53') DESC
Mener det burde vise noget ala
53
12
9
8
7
...

Har ikke testet det af. Men håber det kan bruges alligevel.
steen-h Juniormester
04. august 2016 - 08:56 #3
ORDER BY FIELD(valg,'53') ASC giver
valg     vaegt1     vaegt2     
8     -1.23     -1.23
42     NULL    NULL
23     11.39     29.33
2     -0.67     -0.33
36     NULL    NULL
17     -1.10     -1.29
49     NULL    NULL


ORDER BY FIELD(valg,'53') DESC giver
 valg     vaegt1     vaegt2     
53     -0.29     -0.25
20     2.48     7.98
52     NULL    NULL
33     NULL    NULL
14     -1.15     -0.81
46     NULL    NULL
Rune1983 Guru
04. august 2016 - 09:14 #4
ORDER BY FIELD(valg,'53') DESC, valg ASC

Hvad giver det i resultat?
steen-h Juniormester
04. august 2016 - 09:24 #5
Det gav den løsning jeg ønskede.
Mange tak for hjælpen

valg vaegt1     vaegt2     
53     -0.29     -0.25
1     -0.45     -0.14
2     -0.67     -0.33
3     -0.40     0.09
4     -0.51     -2.01
5     -0.63     -0.38
6     -0.47     -0.48
7     -0.10     0.03
Rune1983 Guru
04. august 2016 - 09:25 #6
Velbekomme. Glad for at kunne hjælpe.
arne_v Ekspert
04. august 2016 - 14:58 #7
Alternativt:

IF(valg=53,0,valg) ASC
steen-h Juniormester
04. august 2016 - 15:50 #8
Interessant løsning arne_v  #7

Nu er mit mysql kald noget jeg fik hjælp til for længe siden.
Hvorfor er der en AS a, den bliver jo ikke brugt ?
WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt2
FROM `veight_2` AS a WHERE 1 GROUP BY valg
arne_v Ekspert
04. august 2016 - 15:58 #9
FROM `veight_2` AS a WHERE 1 GROUP BY valg

maa kunne laves som:

FROM veight_2  GROUP BY valg

ingen grund til AS a
ingen grund til WHERE 1
ingen grund til ``
arne_v Ekspert
04. august 2016 - 15:59 #10
Og saa er det efter min mening problematisk med stavefejl i navne.

vaegt er OK
weight er OK

veight er ikke OK - for stor risiko for at det vil blive skrevet forkert
steen-h Juniormester
04. august 2016 - 16:22 #11
#9
Det virker fint.

#10
Mht. stavefejl har du ret, det havde jeg ikke tænkt på.
I praksis kommer tabellerne fra database kald så jeg indtaster dem ikke selv.
Den viste kode er kun til test i phpMyAdmin
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Tirsdag kårer Microsoft de bedste partnere i Danmark: Proactive og Delegate fører feltet an med flest nomineringer
Landets ypperste Microsoft-partnere bliver tirsdag hædret af Microsofts danske ledelse. 20 virksomheder har fået en indbydelse til det prestigefyldte arrangement. Her er et overblik over, hvem der er blevet nomineret.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
White paper
Gratis whitepaper: Hvad er EDI, og hvordan kan det styrke min forretning?
Overvejer du EDI, og ønsker du at undersøge, om EDI er den rette investering for din virksomhed? Har en af dine kunder eller leverandører for nyligt bedt dig om at udveksle elektroniske dokumenter (EDI)? Så hent dette whitepaper og få et overblik over, hvad EDI er, og hvilke fordele producenter og grossister som dig kan se frem til, når du investerer i EDI til din forretning.