Avatar billede likedon Nybegynder
24. juni 2008 - 14:37 Der er 3 kommentarer og
2 løsninger

Tæl kombinationer

Jeg håber nogen kan hjælpe mig videre.

Hvordan tæller jeg antallet af forekomster af de forskellige kombinationer i tabellen [lister_email]?


Min tabel:
[Tabel - liste_email]
liste_email_id     (autonr.)
liste_email_listeid    
liste_email_emailid    

[Tabel - emails]
email
listen


[lister_email] består af 200000 rækker hvor liste_email_emailid kan stå x antal gange med en tilhørende værdi i liste_email_listeid

liste_email_listeid kan have værdien fra 1 til 20

Det jeg gerne vil have af vide er hvor mange gang forekommer kombinationen 5 og 7, men hvor de emails så ikke er tilmeldt andre lister altså talene fra 1-20 minus 5 og 7


Jeg har leget lidt med følgende sql, men der giver mig også resultater hvor emailen ikke er tilmeldt 7:
select distinct
f1.LISTE_EMAIL_EMAILID,f1.LISTE_EMAIL_LISTEID
from
mailnow_liste_email f1,mailnow_emails
where
(f1.LISTE_EMAIL_LISTEID = '7' or f1.LISTE_EMAIL_LISTEID = '5')
AND f1.liste_email_emailid=mailid AND (listen='15' OR listen='18')
and
f1.LISTE_EMAIL_EMAILID NOT IN
(select distinct f2.LISTE_EMAIL_EMAILID from mailnow_liste_email f2 where
f2.LISTE_EMAIL_LISTEID <> '5'
AND
f2.LISTE_EMAIL_LISTEID <> '7'
)
group by
LISTE_EMAIL_EMAILID
Avatar billede kjulius Novice
24. juni 2008 - 21:04 #1
Hmm... Jeg kan ikke finde hoved og hale i dine relationer mellem tabellerne. Du bruger bl.a. et felt der hedder mailid i din forespørgsel, men den findes ikke i dine tabeller. Og hvorfer er liste 15 og 18 med som en selvstændig selektion i din forespørgsel? Du har også en GROUP BY i din forespørgsel, men ingen aggregat-funktion i din SELECT, så hvorfor er den der?
Avatar billede kjulius Novice
24. juni 2008 - 21:25 #2
Hvis jeg alene skulle tage udgangspunkt i tabellen liste_email ud fra din beskrivelse og droppe alle forsøg på at gætte dine ønsker ud fra den viste forespørgsel, ville mit forslag nok være:

SELECT f1.liste_email_id, COUNT(*) AS TotalKombi5og7Antal, SUM(CASE WHEN f2.liste_email_id IS NULL THEN 1 ELSE 0 END) AS RenKombi5og7Antal, SUM(CASE WHEN f2.liste_email_id IS NULL THEN 0 ELSE 1 END) AS EjRen5og6Antal
FROM liste_email f1
LEFT JOIN (
  SELECT DISTINCT liste_email_id
  FROM liste_email
  WHERE liste_email_listeid <> '5' AND liste_email_listeid <> '7'
) AS f2 ON f1.liste_email_id = f2.liste_email_id
WHERE f1.liste_email_listeid = '5' OR f1.liste_email_listeid = '7'
GROUP BY f1.liste_email_id
Avatar billede likedon Nybegynder
25. juni 2008 - 08:49 #3
De 15 og 18 skal du ikke bekymre dig så meget om, det er bare en ekstra klassificering af hvor de enkelte emails hører til.

Men bortset fra det, så fungere din foresøgelse ikke efter hensigten, den bliver ikke færdig, stoppede den efter 300sekunder.

Men det er nu også lige meget, for nu har jeg lavet det hele om. Ikke kun på grund af problemerne med sql'en, men projektet har selvfølgeligt også lige ændret sig, så jeg har ikke de samme behov længere :-)

Så i stedet for 20 lister har jeg nu kun 4, og disse registrerer jeg nu bare på den enkelte email direkte i dens tabel.

men hvis du vil have pt. kan du ligge et svar, du har dog brugt lidt tid på det.
Avatar billede kjulius Novice
26. juni 2008 - 16:05 #4
OK, tak, du bestemmer selv, hvor mange point det er værd. Jeg kan ikke vurdere, om der til sidst ville være kommet et resultat frem, som vi kunne have arbejdet videre med. Men da projektet, som du siger, har ændret retning er det jo lidt overflødigt at tænke på. 200 point er i hvert fald for meget, for en trods alt meget begrænset indsats.
Avatar billede likedon Nybegynder
30. juni 2008 - 08:19 #5
ok, nu er det jo ikke point jeg mangler, så vi deler da bare
Avatar billede 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. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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