簡體   English   中英

發行時的Teradata案例

[英]teradata case when issue

我有以下查詢,它們應該給出相同的結果,但是卻大不相同1。

         select count(*)
         from qigq_sess_parse_2
         where str_vendor = 'natural search' and str_category is null and destntn_url = 'http://XXXX.com';
  1.   create table qigq_test1 as ( select case when (str_vendor = 'natural search' and str_category is null and destntn_url = 'http://XXXX.com' ) then 1 else 0 end as m from qigq_sess_parse_2 ) with data; select count(*) from qigq_test1 where m = 1; 

第一個塊的總數為132868,而第二個塊的總數為1。

查詢中導致此差異的細微部分是什么?

謝謝

在Teradata中創建表時,可以將其指定為SETMULTISET 如果未指定,則默認為SET 集合表不能包含重復項。 因此,新表最多將包含兩行,即0和1,因為這一切都可以來自case語句。

編輯:經過更多的挖掘后,默認值不是那么簡單。 但是無論如何,我懷疑如果將MULTISET選項添加到create語句中,則會看到預期的行為。

我的猜測是您的Create Table語句僅提取符合以下Count語句參數的一行數據。 嘗試以下方法:

CREATE TABLE qigq_test1 (m integer);
INSERT INTO qigq_test1
SELECT
    CASE
        WHEN (str_vendor = 'natural search' and str_category IS NULL AND destntn_url = 'http://XXXX.com' ) THEN 1
        ELSE 0 
    END AS m
FROM qigq_sess_parse_2;
SELECT COUNT(*) FROM qigq_test1 WHERE m = 1;

這應將所有數據行從qigq_sess_parse_2qigq_test1作為0或1。

暫無
暫無

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

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