簡體   English   中英

MySQL在同一張表上比較兩個值

[英]MySQL compare two values on same table

我正在嘗試比較同一張表中的兩個值,並檢查是否存在差異。 現在,我在cms_statistics_pages表中有1485條記錄,但是在下面的查詢中:

SELECT
    cp.identifier,
    COUNT(csp1.statID) AS hits,
    COUNT(csp2.statID) AS hits_yesterday,
    IF(COUNT(csp1.statID)>COUNT(csp2.statID),1,0) AS growth
FROM cms_pages cp
LEFT JOIN cms_statistics_pages csp1
      ON csp1.pageID = cp.pageID
      AND DATE(csp1.datetime) = '2012-07-20'
LEFT JOIN cms_statistics_pages csp2
      ON csp2.pageID = cp.pageID
      AND DATE(csp2.datetime) = '2012-07-19'
GROUP BY cp.identifier

..被解雇,我得到以下結果:

identifier                  hits    hits_yesterday  growth
index                       13395   13395           0
siden-er-under-opdatering   638     638             0
vores-historie              0       3               0

這對我來說不正確。 然后,如果我更改:

AND DATE(csp1.datetime) = '2012-07-20'

到沒有記錄的日期

AND DATE(csp1.datetime) = '2012-07-21'

我的結果現在看起來像這樣:

identifier                  hits   hits_yesterday   growth
index                       0      141              0
siden-er-under-opdatering   0      29               0
vores-historie              0      3                0

現在命中是正確的,所以我想知道當兩個聯接都包含一些數據時查詢是否對記錄進行多次計數。

來自cms_pages的示例數據:

pageID  sectionID   templateID  identifier  default title exclude_title 
    1       1       1           index   1       Welcome to SiteTech Framework 2012

來自cms_statistics_pages的示例數據:

statID  frontend    backend     pageID  sectionID   panel   datetime
    1       0       1       34      6       admin   2012-07-17 12:34:14

我碰到了這篇文章,它提供了一種更高級的方法來對多個表進行計數,這可能會阻止查詢多次對同一記錄進行計數。 我自己還沒有嘗試過-https: //discussion.dreamhost.com/thread-9112.html

因此,我一直在弄亂查詢,並找到了一個包括左聯接和子查詢的解決方案。 我的查詢現在看起來像:

SELECT 
    cp.identifier,
    now.hits AS hits,
    yd.hits AS hits_yesterday,
    IF(now.hits>yd.hits,1,0) AS growth
FROM cms_pages AS cp
LEFT JOIN 
    (
        SELECT
            pageID,
            COUNT(pageID) AS hits
        FROM cms_statistics_pages
        WHERE DATE(datetime) = '2012-07-20'
        GROUP BY pageID
    ) now
ON now.pageID = cp.pageID
LEFT JOIN
    (
        SELECT  pageID,
            COUNT(pageID) AS hits
        FROM cms_statistics_pages
        WHERE DATE(datetime) = '2012-07-19'
        GROUP BY pageID
    ) yd
ON yd.pageID = cp.pageID

這給了我這個正確的結果!:

identifier                  hits    hits_yesterday  growth
index                       95      141             0
siden-er-under-opdatering   22      29              0
vores-historie              NULL    3               0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM