我有以下查询,它们应该给出相同的结果,但却截然不同 1。
select count(*)
from qigq_sess_parse_2
where str_vendor = 'natural search' and str_category is null and destntn_url = 'http://XXXX.com';
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.
查询中导致这种差异的细微部分是什么?
由于
答案 0 :(得分:2)
在Teradata中创建表格时,您可以将其指定为SET
或MULTISET
。如果您未指定,则默认为SET
。集表不能包含重复项。所以最多,你的新表将包含两行,0和1,因为这可以来自你的case语句。
编辑: 经过一番挖掘后,默认设置并不那么简单。但无论如何,我怀疑如果你将MULTISET选项添加到你的create语句中,你会看到你期望的行为。
答案 1 :(得分:0)
我的猜测是你的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_2
中的 ALL ROWS 数据拉入qigq_test1
作为0或1。