我有一个使用以下语句创建的Postgres表.此表由另一个服务的数据转储填充.
CREATE TABLE data_table (
date date DEFAULT NULL,
dimension1 varchar(64) DEFAULT NULL,
dimension2 varchar(128) DEFAULT NULL
) TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)
我正在构建的ETL中的一个步骤是提取它们的唯一值dimension1并将它们插入另一个中间表中.但是,在某些测试中,我发现下面的2个命令不会返回相同的结果.我希望两者都返回相同的金额.与第二个命令相比,第一个命令返回的结果更多(1466行与1504行相比).
-- command 1
SELECT DISTINCT count(dimension1)
FROM data_table;
-- command 2
SELECT count(*)
FROM (SELECT DISTINCT ON (dimension1) dimension1
FROM data_table
GROUP BY dimension1) AS tmp_table;
Run Code Online (Sandbox Code Playgroud)
有什么明显的解释吗?作为解释的替代方案,是否有任何建议检查我应该做的数据?
编辑:以下查询都返回1504(与"简单"相同DISTINCT)
SELECT count(*)
FROM data_table WHERE dimension1 IS NOT NULL;
SELECT count(dimension1)
FROM data_table;
Run Code Online (Sandbox Code Playgroud)
谢谢!
我已经看到了如何声明一个函数向量(请参阅从向量中调用函数).
但那个答案是用户的指针.如何使用现代C++中的新语法创建函数/ lambda的向量?
使用新语法的函数示例通常使用auto:
auto f = [] (std::string msg) -> void {
std::cout << msg << std::endl;
};
Run Code Online (Sandbox Code Playgroud)
f的实际类型是什么?所以我可以声明这种类型的向量?
非常感谢你的帮助
在下面的代码中,我创建了一个lambda,它通过引用捕获局部变量.请注意,它是一个指针,因此,如果C++ lambdas是真正的闭包,它应该在创建lambda的函数的生命周期中存活.
但是,当我再次调用它时,它不是创建一个新的局部变量(一个新的环境),而是像以前一样重用它,实际上,它捕获与之前完全相同的指针.
这似乎是错的.或者,C++ lambdas不是真正的闭包,还是我的代码不正确?
感谢您的任何帮助
#include <iostream>
#include <functional>
#include <memory>
std::function<int()> create_counter()
{
std::shared_ptr<int> counter = std::make_shared<int>(0);
auto f = [&] () -> int { return ++(*counter); };
return f;
}
int main()
{
auto counter1 = create_counter();
auto counter2 = create_counter();
std::cout << counter1() << std::endl;
std::cout << counter1() << std::endl;
std::cout << counter2() << std::endl;
std::cout << counter2() << std::endl;
std::cout << counter1() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码返回:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
但我期待它回归:
1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 ubuntu 17.10 下安装 scala:
$ scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
Run Code Online (Sandbox Code Playgroud)
我已经安装了jdk版本8:
$ java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-8u144-b01-2-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)
如果我分两步完成,我就可以编译并运行 scala 程序:
$ scalac rip.scala
$ scala rip
hello world
Run Code Online (Sandbox Code Playgroud)
但我无法在一次 scala 调用中编译和运行:
$ scala rip.scala
error: fatal error: object java.lang.Object in compiler mirror not found.
one error found
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么,或者我错过了什么。我将不胜感激任何帮助。
我试图将数据从本地机器的 csv 文件复制到名为 states 的远程 pgsql 表中,但我收到一个错误:“FROM”处或附近的语法错误。有人可以指导我为什么会收到此错误吗?
COPY FROM STDIN states FROM '/Users/Shared/data.csv' DELIMITER AS ',';
Run Code Online (Sandbox Code Playgroud) 嗨在我的应用程序中我使用的是SQLITE数据库,
我想在表格中添加多个列,
如果我添加一个工作正常的列,
我正在使用ALTER表添加新列,
有了这个我能够更新一列,
ALTER TABLE "main"."tblCredit" ADD COLUMN "CardDetail" VARCHAR
Run Code Online (Sandbox Code Playgroud)
但是如何在tblCredit表格中添加多列.
我想替换一个简单的for循环:
for (auto i=0;i<n;i++) {
whatever;
}
Run Code Online (Sandbox Code Playgroud)
使用以下形式的迭代器:
for (auto i: <something>) ...
Run Code Online (Sandbox Code Playgroud)
我知道它可以用向量完成,但我不想声明一个向量(并填充它).
从理论上讲,我想要一些简单的东西:
for (auto i: 1..n) ...
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢.