小编dmg*_*dmg的帖子

Postgres DISTINCT与DISTINCT ON

我有一个使用以下语句创建的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)

谢谢!

sql postgresql

14
推荐指数
1
解决办法
6021
查看次数

如何声明函数向量(lambdas)

我已经看到了如何声明一个函数向量(请参阅从向量中调用函数).

但那个答案是用户的指针.如何使用现代C++中的新语法创建函数/ lambda的向量?

使用新语法的函数示例通常使用auto:

auto f = [] (std::string msg) -> void { 
    std::cout << msg << std::endl;
};
Run Code Online (Sandbox Code Playgroud)

f的实际类型是什么?所以我可以声明这种类型的向量?

非常感谢你的帮助

c++ c++11 c++14

7
推荐指数
2
解决办法
2852
查看次数

C++ lambdas是真正的闭包吗?通过引用捕获

在下面的代码中,我创建了一个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)

c++ lambda c++14

7
推荐指数
2
解决办法
1343
查看次数

错误:致命错误:编译器镜像中找不到对象 java.lang.Object:在 ubuntu 17.10 下安装 scala 2.11.8:

我正在尝试在 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)

我不知道我做错了什么,或者我错过了什么。我将不胜感激任何帮助。

ubuntu scala

5
推荐指数
0
解决办法
1053
查看次数

将数据从本地 .CSV 文件复制到远程服务器中的 pgsql 表

我试图将数据从本地机器的 csv 文件复制到名为 states 的远程 pgsql 表中,但我收到一个错误:“FROM”处或附近的语法错误。有人可以指导我为什么会收到此错误吗?

   COPY FROM STDIN states FROM '/Users/Shared/data.csv'  DELIMITER AS ',';
Run Code Online (Sandbox Code Playgroud)

postgresql

4
推荐指数
1
解决办法
3863
查看次数

SQLITE:如何向表中添加多个列?

嗨在我的应用程序中我使用的是SQLITE数据库,

我想在表格中添加多个列,

如果我添加一个工作正常的列,

我正在使用ALTER表添加新列,

有了这个我能够更新一列,

ALTER TABLE "main"."tblCredit" ADD COLUMN "CardDetail" VARCHAR
Run Code Online (Sandbox Code Playgroud)

但是如何在tblCredit表格中添加多列.

sqlite

1
推荐指数
1
解决办法
9789
查看次数

是否可以使用for(auto i:<something>)替换(auto i = 0; i <n; i ++)...而不使用向量?

我想替换一个简单的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)

这可能吗?

谢谢.

c++

1
推荐指数
2
解决办法
276
查看次数

标签 统计

c++ ×3

c++14 ×2

postgresql ×2

c++11 ×1

lambda ×1

scala ×1

sql ×1

sqlite ×1

ubuntu ×1