我在Teradata中有两个表:Table_A和Table_B.他们之间是LEFT JOIN.之后我正在制作SELECT语句,其中包含两个表的属性:
SELECT
attribute_1
attribute_2
...
attribute_N
Run Code Online (Sandbox Code Playgroud)
后来,我使用SUM函数进行某些计算.这些函数看起来像这样:
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
(在此示例中,使用选择部分中的属性).
但我也在CASE部分属性中使用了不在select语句中的东西 - 有点谎言:
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
当然最后我正在做GROUP BY 1,2,...,N
我得到的错误是"选定的非聚合值必须是关联组的一部分." 此外,我已经检查了SELECT部分中所选属性数十亿倍,它是N.问题是 - 为什么我会收到此错误?是因为我在SUM部分使用,即CASE部分属性(attribute_X和attribute_Y),它们不包含在SELECT部分中?
最终陈述的蓝图看起来很像.像这样:
INSERT INTO table_new
SELECT
attribute_1,
attribute_2,
...
attribute_N,
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
) as sum_a,
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
) …
Run Code Online (Sandbox Code Playgroud) 给定数据框:
d = structure(list(bin_start = 1:12,
bin_count = c(12892838L, 1921261L, 438219L, 126650L, 41285L,
15948L, 6754L, 3274L, 1750L, 992L, 703L, 503L)),
.Names = c("bin_start", "bin_count"),
class = "data.frame",
row.names = c(NA, 12L))
Run Code Online (Sandbox Code Playgroud)
我可以用stat="identity"
以下方法构建直方图:
ggplot(d) +
geom_histogram(aes(x=bin_start, y=bin_count), stat="identity",
colour="black", fill="white") +
scale_x_continuous(breaks=1:12)
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
对长尾不满意我限制x比例(相当于xlim=c(1,6)
):
ggplot(d) +
geom_histogram(aes(x=bin_start, y=bin_count), stat="identity", colour="black", fill="white") +
scale_x_continuous(breaks=1:12, limits=c(1,6))
Run Code Online (Sandbox Code Playgroud)
但我得到边界点x=1
并x=6
消失:
注意,y轴仍然像边界点一样缩放属于情节美学.它是一个功能还是一个bug?
有人可以解释我在Teradata中得到的以下结果:
SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4)) )
Run Code Online (Sandbox Code Playgroud)
结果是:
DECIMAL(18,8)
Run Code Online (Sandbox Code Playgroud)
我期待DECIMAL(18,4)
我很难理解某个Java正则表达式会匹配什么:
"<(\\w+)></\\1>"
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这篇http://docs.oracle.com/javase/tutorial/essential/regex/
但是我仍然无法弄清楚那个表达式会匹配什么,尤其是那个\1
部分.我可以看到,这<(\w+)>
是一个匹配任何单词的占有量词,但我不明白为什么使用()
根据教程的匹配组.
至于第二部分,我只是不知道\1
会匹配什么.我试过了
"001123344556678899".replaceAll("\\1", "");
Run Code Online (Sandbox Code Playgroud)
因为我认为它可能只是匹配一个数字,但它给了我回到我的字符串,因为没有任何替代.
鉴于两个向量:
x = c('a','b')
lookup = c('a','c','d','e','f')
Run Code Online (Sandbox Code Playgroud)
如果在每个元件的测试x
存在于lookup
.一种方法:
all(!is.na(match(x, lookup)))
Run Code Online (Sandbox Code Playgroud)
我发现这个解决方案对R来说有点冗长,并且想知道是否有更好/更短的版本.