Count voldoet niet doordat Group By alle waarden toont

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • JohanLi
  • Registratie: April 2022
  • Laatst online: 10-02-2023
Ik wil berekenen hoe vaak wij in het magazijn van locatie A naar locatie B gestuurd worden. Hierbij zijn er 3.000 locaties. Wat dus inhoudt dat de uitkomst maximaal 3.000 x 3.000 = 9.000.000 uitkomsten kan geven.

Via Lead bepaal ik wat locatie B is, vervolgens maak ik via Concat ik elke "Van-Naar" uniek. Nu wil ik weergeven hoe vaak elke Van-Naar voorkomt.

Echter daar lijken de verwijzing in mijn formule tegen te werken.

Hieronder de formule, waarbij RISQLC de locatie is, en RIRFRN het ordernummer. Deze heb ik nodig in mijn "Lead" formule. Maar vervolgens kan ik de query niet draaien wanneer ik deze twee waardes niet ingeef bij "Group by".

Heeft iemand de oplossing?


select concat(left(RFORFILG.RISQLC,6), lead(left(RFORFILG.RISQLC,6),1) over (partition by RFORFILG.RIRFRN order by left(RFORFILG.RISQLC,6),RIRFRN)) as "Merged",count(*)
from RFORFILG


where RFORFILG.RIDATE > '20210900' and left(RISQLC,2) = 'AA'
group by RISQLC, RIRFRN
order by concat(left(RFORFILG.RISQLC,6), lead(left(RFORFILG.RISQLC,6),1) over (partition by RFORFILG.RIRFRN order by left(RFORFILG.RISQLC,6),RIRFRN))

Alle reacties


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 15:42

Haan

dotnetter

JohanLi schreef op vrijdag 9 september 2022 @ 10:21:
Ik wil berekenen hoe vaak wij in het magazijn van locatie A naar locatie B gestuurd worden. Hierbij zijn er 3.000 locaties. Wat dus inhoudt dat de uitkomst maximaal 3.000 x 3.000 = 9.000.000 uitkomsten kan geven.
Dit klopt volgens mij niet, als je de locaties als een volledige graaf ziet (iedere locatie een verbinding met alle andere) is de formule 1/2 x n(n-1), dus 1500x2999 = 4.498.500

Wikipedia: Grafentheorie

Kater? Eerst water, de rest komt later


Acties:
  • +2 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Geez zou makkelijker zijn als je een data structuur zou vermelden en niet alleen een halve oplossing.

Begrijp ik dat elke order een soort van lijst van records heeft

Offer 1, 7-9-2022, plaats A
Offer 1, 8-9-2022, plaats B
Offer 1, 9-9-2022, plaats C
Offer 2, 8-9-2022, plaats A
Offer 2, 9-9-2022, plaats C

Dan je dus van het volgende (LEAD) record wil weten waar het heen is gegaan en dan die optellen?

Subqueries is dan denk ik handiger. Eerst een dataset maken met de verplaatsingen.

SELECT COUNT(*), van, naar FROM (SELECT offer, van, **LEAD(van)** AS naar FROM ...) AS filterNoLead WHERE naar IS NOT NULL GROUP BY van, naar

Acties:
  • +1 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Haan schreef op vrijdag 9 september 2022 @ 11:13:
[...]

Dit klopt volgens mij niet, als je de locaties als een volledige graaf ziet (iedere locatie een verbinding met alle andere) is de formule 1/2 x n(n-1), dus 1500x2999 = 4.498.500

Wikipedia: Grafentheorie
Dit gaat niet op want je wil heen en weer als aparte connecties zien.

Acties:
  • 0 Henk 'm!

  • JohanLi
  • Registratie: April 2022
  • Laatst online: 10-02-2023
Haan schreef op vrijdag 9 september 2022 @ 11:13:
[...]

Dit klopt volgens mij niet, als je de locaties als een volledige graaf ziet (iedere locatie een verbinding met alle andere) is de formule 1/2 x n(n-1), dus 1500x2999 = 4.498.500

Wikipedia: Grafentheorie
Daar heb je idd gelijk in!

Acties:
  • 0 Henk 'm!

  • JohanLi
  • Registratie: April 2022
  • Laatst online: 10-02-2023
luukvr schreef op vrijdag 9 september 2022 @ 11:57:
[...]


Dit gaat niet op want je wil heen en weer als aparte connecties zien.
Nee, niet helemaal, de volgende locatie is altijd oplopend in alfabetische volgorde. Maar dat had ik er niet bij vermeld.

Uiteindelijk komt het op hetzelfde neer; 9.000.000 of 4.500.000 mogelijkheden, beide is teveel om fatsoenlijke data uit te halen.

Acties:
  • 0 Henk 'm!

  • JohanLi
  • Registratie: April 2022
  • Laatst online: 10-02-2023
luukvr schreef op vrijdag 9 september 2022 @ 11:33:
Geez zou makkelijker zijn als je een data structuur zou vermelden en niet alleen een halve oplossing.

Begrijp ik dat elke order een soort van lijst van records heeft

Offer 1, 7-9-2022, plaats A
Offer 1, 8-9-2022, plaats B
Offer 1, 9-9-2022, plaats C
Offer 2, 8-9-2022, plaats A
Offer 2, 9-9-2022, plaats C

Dan je dus van het volgende (LEAD) record wil weten waar het heen is gegaan en dan die optellen?

Subqueries is dan denk ik handiger. Eerst een dataset maken met de verplaatsingen.

SELECT COUNT(*), van, naar FROM (SELECT offer, van, **LEAD(van)** AS naar FROM ...) AS filterNoLead WHERE naar IS NOT NULL GROUP BY van, naar
Terechte opmerking over de datastructuur, ik heb even een paar regels toegevoegd. In dit voorbeeld is locatie A toevallig hetzelfde als locatie B, maar dat doet niet ter zake. Waar het mij omgaat is dat er drie regels getoond worden en COUNT telkens 1 is, terwijl ik deze drie regels graag samengevoegd met COUNT 3 zou zien.

Jouw oplossing werkt mijns inziens niet, omdat ik om "naar" te bepalen de rechter twee kolommen nodig heb. Dat doe ik middels de LEAD, waarbij ik naar deze kolommen verwijs, en ze dan vervolgens ook in "GROUP BY" moet gebruiken.

Afbeeldingslocatie: https://abload.de/img/schermafbeelding2022-awde2.jpg

Acties:
  • 0 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
JohanLi schreef op vrijdag 9 september 2022 @ 12:39:
[...]


Terechte opmerking over de datastructuur, ik heb even een paar regels toegevoegd. In dit voorbeeld is locatie A toevallig hetzelfde als locatie B, maar dat doet niet ter zake. Waar het mij omgaat is dat er drie regels getoond worden en COUNT telkens 1 is, terwijl ik deze drie regels graag samengevoegd met COUNT 3 zou zien.

Jouw oplossing werkt mijns inziens niet, omdat ik om "naar" te bepalen de rechter twee kolommen nodig heb. Dat doe ik middels de LEAD, waarbij ik naar deze kolommen verwijs, en ze dan vervolgens ook in "GROUP BY" moet gebruiken.

[Afbeelding]
is niet de datastructuur of mock data maar results van een andere query maar dat ter zake:

als je daar dus een super query omheen zet, die ze groepeert dan ben je er al?
Pagina: 1