簡體   English   中英

如果滿足條件,則SQL查詢返回1列,否則返回0列

[英]SQL query returning a column of 1 if a condition is met and 0 otherwise

我創建了一個不錯的查詢,以觀察進入我站點的所有唯一IP。 該架構如下:

Page_Statistic-包含每個頁面命中的數據(每個命中一個記錄)。

  • page_statistic_id。
  • ip-訪問者的IP地址。
  • 標記-用於錄制特殊內容,例如“ demo”(如果嘗試過演示的話)。
  • url-他們訪問過的頁面。
  • request_on-訪問時間。

Ip_Location_Info-包含每個訪問者的位置數據(每個ip一個記錄)。

  • ip
  • 國家
  • 區域
  • 壓縮

我想獲得所有唯一的IP地址,以及位置,訪問次數,時間范圍以及他們是否在我的網站上嘗試了該演示-這是我遇到的麻煩。 如果他們嘗試過演示,我想要1,如果沒有嘗試,我想要0。 IP已嘗試演示,前提是在Page_Statistic中存在標簽設置為“ demo”的tupple。

我創建了以下查詢來解決此問題:

WITH uniqueips(frst, lst, ip, visits) AS
(
    SELECT MIN(requested_on), MAX(requested_on), ip, count(*) AS visits
    FROM Page_Statistic p
    GROUP BY ip
),
tried_demo(ip, tried_demo) AS
(
    SELECT DISTINCT ip.ip, ISNULL(p.page_statistic_id - p.page_statistic_id + 1, 0) 
    FROM uniqueips ip
    LEFT JOIN Page_Statistic p ON p.ip = ip.ip AND p.tag = 'demo'
)
SELECT 
i.*, ip.frst AS first_appeared_on, 
    ip.lst AS last_appeared_on, 
    ip.visits,
    d.tried_demo
FROM Ip_Location_Info i
JOIN uniqueips ip ON ip.ip = i.ip
JOIN tried_demo d ON ip.ip = d.ip
ORDER BY ip.frst

但是丑陋的地方是我為try_demo設置了1或0。

ISNULL(p.page_statistic_id - p.page_statistic_id + 1, 0)

之所以有效,是因為如果p.page_statistic_id為null,則將1加到null上就等於null,因此isull將返回參數列表(0)中的第二項。 真是個駭客! 正確的方法是什么?

擁有它的方式很好用,但是如果要更改它,可以將其更改為

case when p.page_statistic_id is null then 0 else 1 end

要么

將您的try_demo CTE更改為此

tried_demo(ip, tried_demo) AS
(
    SELECT DISTINCT p.ip, cast(1 as bit) 
    FROM Page_Statistic 
    WHERE p.tag = 'demo'
)

那么您的選擇可以像這樣

SELECT 
i.*, ip.frst AS first_appeared_on, 
    ip.lst AS last_appeared_on, 
    ip.visits,
    coalesce(d.tried_demo,0) as tried_demo
FROM Ip_Location_Info i
JOIN uniqueips ip ON ip.ip = i.ip
LEFT JOIN tried_demo d ON ip.ip = d.ip
ORDER BY ip.frst

暫無
暫無

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

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