2011-06-18 8 views
-2

je dois sélectionner tous les liens de la table des liens dont les statistiques ne sont pas nulles:sélectionner les enregistrements dont le comte, Somme et sous-requêtes

Table tlink: 
    linkid, linkname, userid 

Table tuser: 
    userid, username 

Table tfact: 
    factid, factorder, userid 

Table tstat: 
    statid, linkid, userid 

L'utilisateur des commandes de TUser clics qui sont enregistrées dans TFACT.

L'utilisateur peut créer plusieurs liens qui sont enregistrés dans tlink.

Chaque clic sur un lien est enregistré dans tstat.

La page Web doit filtrer tous les liens dont les clics ordonnés sont utilisés.

EG La société ABC commande 3 fois 100 clics, soit un total de 300 clics.

Ensuite, ils créent plusieurs liens qui sont tous affichés jusqu'à ce que le total de 300 clics est utilisé.

J'ai essayé plusieurs requêtes // Sous-requêtes, mais en vain et j'apprécierais toute aide.

+0

Qu'avez-vous essayé jusqu'ici? pouvez-vous fournir la même chose. Aussi, essayez de modifier votre question. – Rahul

+0

J'ai essayé beaucoup de requêtes différentes, par exemple SELECT DISTINCT dbo.stat.linkid, COUNT (dbo.stat.statid) AS mon_stat, dbo.link.linkid AS Expr1 De dbo.link INNER JOIN dbo.stat ON dbo.link. linkid = dbo.stat.linkid WHERE (dbo.stat.userid < (SELECT SUM (factorder) AS my_order DE dbo.fact OU (dbo.link.userid = ID utilisateur))) GROUP BY dbo.stat. linkid, dbo.link.linkid mais n'a obtenu nulle part! – Mike

Répondre

0

Quelque chose comme ça?

SELECT 
    l.linkid, 
    l.linkname, 
    l.userid, 
    u.username, 
    f.factorder - s.clickCount AS clicksUnused 
FROM 
    tlink l 
    INNER JOIN tuser u ON u.userid = l.userid 
    INNER JOIN tfact f ON f.userid = l.userid 
    INNER JOIN (
     SELECT 
      linkid, 
      userid, 
      COUNT(*) AS clickCount 
     FROM 
      tstat 
     GROUP BY 
      linkid, 
      userid 
     ) s ON s.linkid = l.linkid AND s.userid = l.userid 
+0

merci, mais il ne tient pas compte des clics commandés dans le tableau tfact qui doit être superiot aux clics statisticien dans tstat – Mike

+0

@Mike Ok, l'a changé. Mais pourquoi enregistrer des clics qui ne sont pas commandés? – NGLN

+0

L'idée de sélectionner uniquement les liens qui sont encore disponibles et exclure le lien dont les clics ordonnés ont été atteints. Par exemple, vous commandez aujourd'hui 100 clics et la semaine prochaine 200 autres, soit 300, puis vous créez des liens, peut-être 3 différents, mais lorsque vous avez atteint vos 300 clics, vos liens ne seront plus affichés. Par conséquent, l'idée est que cette requête ne retournera que les liens qui n'ont pas atteint le total des clics commandés qui sont stockés dans tfact. – Mike

0

@NGLN

Salut

Je suis désolé de ne pas répondre plus tôt, mais ai été absent pendant quelques jours.

Je pense que je l'ai eu de travail OK:

SELECT L.linkid, F.OrderSum - S.clickCount AS clicksUnused DE L TLink AS JOIN INNER (SELECT userid, SUM (factorder) AS OrderSum DE TFACT GROUP BY id_utilisateur) AS F ON F.userid = L.userid INNER JOIN (SELECT ID_utilisateur, COUNT (*) AS clickCount FROM tstat GROUPE BY id_utilisateur) AS S ON S.userid = L.userid --WHERE - clicksUnused> = 1

problème que maintenant que je ne peux pas filtrer les liens dont clicksUnused sont supérieurs à 1.

Toutes les idées, merci, Mike

Mise à jour Got ce travail

OÙ F.OrderSum> S.clickCount

Est-ce la bonne façon?

Questions connexes