webForumDet fria alternativet

Hur sorterar manut från två tabeller

Databaser & SQL

7 svar · 277 visningar · startad av wazid

Medlem sedan maj 2001156 inlägg
Frågan#1

Hej

Så här är läget:
Jag har en databas där jag kan få ut en lista med kunders omsättning (lönsamhet), sorterad i fallande ordning.

Sedan kan jag få ut en lista på produkters omsättning (lönsamhet) i fallande ordning.

Jag har sparat dessa två som vyer.

Nu skulle jag vilja kunna få ut tex de produkter som finns långt ned på listan och som endast köps av kunder som är långt ned på sin lista.
Vill alltså få ut olönsamma produkter som köps av olönsamma kunder.

Någon som har lite ledtrådar på hur man ska göra...

MvH

David

Medlem sedan dec. 200012 464 inlägg
#2

Hur definerar du vad som är låg lönsamhet?

De 10 med lägst omsättning?

Under halva medianvärdet?

Mindre än 30 % av den med högst omsättning?

Hur vet du vilken kund som köpt vilken produkt?

Medlem sedan maj 2001156 inlägg
#3

Låt oss säga att jag vill köra efter 80/20 regeln.
De som är bland de 20% högsta är bra. De övirga 80% är inte bra.

Jag har en försäljningstabell med alla orderrader och i den har jag kundnr och artikelnr.

Jag skulle tro att den kan bli användbar.

MvH

David

Medlem sedan dec. 200012 464 inlägg
#4

av => vy för artiklar
-------------------------
artikelnr
total -- total försäljning för denna artikel

kv => vy för kunder
-------------------------
kundnr
total -- totalt köp för denna kund

forsaljning => ordertabell
---------------------------------
artikelnr
kundnr

select * from forsaljning
where artikelnr in(
select av1.artikelnr
 from av av1,
   av av2          
 where  av1.total >= av2.total  
 group by av1.artikelnr,av1.total 
  having count(*) <= (select 0.8*(count(*)+0.0) from av))
and kundnr in(
select kv1.kundnr
 from kv kv1,
   kv kv2          
 where kv1.total >= kv2.total  
 group by kv1.kundnr,kv1.total 
  having count(*) <= (select 0.8*(count(*)+0.0) from kv))
Medlem sedan maj 2001156 inlägg
#5

Ja, det verkar bli ett resultat.
Jag får återkomma då jag validerat resultatet.

Det tar väldigt lång tid dock.
Nu har vi ganska många orderrader.
Jag avbröt körningen efter 10 timmar..

MvH

David

Medlem sedan maj 2001156 inlägg
#6

No körde jag igenom hela orderradstabellen för ett år.
Det tog 34 timmar....

Jag få ut ett resultat, men jag tror att jag får med alla produkter som är olönsamma.
Jag vill enbart få med em om de endast köps av kunder som är olönsamma.

Jag borde nog kunna köra distinct på Försäjlning, så att det inte blir så många rader att loopa igenom.

Kanske man ska gå tillväga på något annat sätt?
Kan man i frågan istället jämföra kunderna mot en tabell där jag har med enbart de kunder som är lönsamma.
Och om produkten har en träff i denna tabellen, så ska produkten inte tas med i slutresultatet.

MVH

David

Medlem sedan dec. 200012 464 inlägg
#7

Jag få ut ett resultat, men jag tror att jag får med alla produkter som är olönsamma.
Jag vill enbart få med em om de endast köps av kunder som är olönsamma.

Då jag har AND mellan villkoren så borde resultatet bli det du vill. Om jag tänker rätt så borde du få med 64 % av alla försäljningar.

Att, som du är inne på, skapa temporärtabeller (indexerade på artikelnr och kundnr respektive) som enbart innehåller relevanta poster borde snabba upp det väsentligt.

Medlem sedan maj 2001156 inlägg
#8

Ok jag försöker på ett annat sätt, men får inte till det riktigt.

Jag loopar igenom orderraderna (forsaljning)
och vill bara få med de som inte förekommer i nästa selectsats.
I den selectsatsen så har jag gjort en tabell av de lönsamma kunderna och alla orderrader som de tillsammans har gjort.

select distinct kundnr, artikelnr from forsaljning
where not  exists(
SELECT     
[874_lonsamma_kunder].kundnr, Forsaljning.artikelnr
FROM         
[874_lonsamma_kunder] 
INNER JOIN Forsaljning 
ON [874_lonsamma_kunder].kundnr = Forsaljning.kundnr
)

Men jag får ut ett tomt resultat.....
Någon som ser felet?

MvH

David

320 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
152 ms — deklarationer (db)
0 ms — hämta statistik (cache)
162 ms — hämta tråd, inlägg och bilagor (db)
155 ms — ändringar (db)