2011-06-18 337 views
-2

選擇記錄,我需要選擇從鏈接表,其統計數據是不爲零的所有鏈接:以計數,總結和子查詢

Table tlink: 
    linkid, linkname, userid 

Table tuser: 
    userid, username 

Table tfact: 
    factid, factorder, userid 

Table tstat: 
    statid, linkid, userid 

在TUSER訂單被記錄在tfact點擊的用戶。

用戶可以創建多個記錄在tlink中的鏈接。

每個點擊任何鏈接都記錄在tstat中。

網頁應該過濾所有使用了有序點擊的鏈接。

EG公司ABC訂購3次100次點擊,總共300次點擊。

然後他們創建了幾個鏈接,這些鏈接全部顯示,直到總共使用300次點擊。

我已經嘗試了幾個查詢//子查詢,但無濟於事並希望得到任何幫助。

+0

你到目前爲止嘗試過什麼;你能提供相同的嗎?另外,嘗試編輯你的問題。 – Rahul

+0

我試過很多不同的查詢,例如SELECT DISTINCT dbo.stat.linkid,COUNT(dbo.stat.statid)AS my_stat,dbo.link.linkid AS Expr1 FROM dbo.link INNER JOIN dbo.stat ON dbo.link。的linkID = dbo.stat.linkid WHERE(dbo.stat.userid < (SELECT SUM(factorder)AS my_order FROM dbo.fact WHERE(dbo.link.userid =用戶ID))) GROUP BY dbo.stat。 linkid,dbo.link.linkid,但無處可去! – Mike

回答

0

是這樣的?

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

謝謝,但它沒有考慮到表tfact中訂購的點擊次數,它必須高於tstat – Mike

+0

@Mike Ok中的點擊次數,並對其進行了更改。但是,爲什麼你要註冊沒有訂購的點擊? – NGLN

+0

這樣做的想法是隻選擇仍然可用的鏈接並排除已達到有序點擊的鏈接。例如,您今天訂購100個點擊,下週訂購另外200個總計300個,然後您創建一些鏈接,也許3個不同的鏈接,但是當您達到300次點擊時,您的鏈接將不再顯示。因此,這個想法是,這個查詢將只返回尚未達到存儲在tfact中的點擊總數的鏈接。 – Mike

0

@NGLN

我在前面不回答抱歉,但已經離開一些日子。

我想我得到它的工作確定:

SELECT L.linkid,F.OrderSum - S.clickCount AS clicksUnused FROM TLINK爲L INNER JOIN(SELECT用戶ID,SUM(factorder)AS OrderSum FROM tfact GROUP BY userid)AS F ON F.userid = L.userid INNER JOIN(SELECT userid,COUNT(*)AS clickCount FROM tstat GROUP BY userid)AS S ON S.userid = L.userid --WHERE - clicksUnused> = 1個

現在

唯一的問題,我不能過濾掉鏈接,其clicksUnused均高於1

任何想法,謝謝,邁克

UPDATE得到這個工作

WHERE F.OrderSum> S.clickCount

這是正確的方法是什麼?