gpt4 book ai didi

java - 在 Java 或 C++ 等编程语言中有效地模拟 SQL group by 子句,而不是求助于 RDBMS

转载 作者:行者123 更新时间:2023-11-30 02:55:31 25 4
gpt4 key购买 nike

我想对上传的文件执行动态 SQL GROUP BY。我不想先将文件存储在数据库中,然后再执行该子句,因为这对我的需要来说太耗时了。

我可以在 Java 或 C++ 中使用的高效算法是什么?最好是 C++。

提前感谢您的任何想法和答案。

最佳答案

最简单的方法可能是只对您在 SQL 的 group by 子句中使用的字段上的数据进行排序。

分组比排序有更宽松的约束,因此理论上它可能比排序快一点,但除非您处理大量数据,否则您不太可能看到速度差异。

当您使用 SQL 的汇总功能时,最大的区别就来了。例如,select x, count(x) from wherever, group by x 将显示 x 的每个值以及每个值的计数。对于这样的功能,您通常会在 C++ 中使用 std::mapstd::unordered_map,或者使用 HashMapTreeMap 在 Java 中。

编辑:

对于一个真正微不足道的例子,让我们考虑一个相当简单的 group-by 子句的结果,我们需要计算不同年份出生的人数。我们将从这样的原始数据开始:

last-name<tab>first-name<tab>height<tab>birth-year

所以(例如)我将被编码为:

Coffin\tJerry\t70\t1964

在 SQL 中,我们可能会使用:

select birth_year, count(birth_year) 
from people
group by birth_year
order by birth_year

对于 C++ 中的粗略等效代码,我们可能会编写如下代码:

struct person { 
std::string last_name;
std::string first_name;
int height;
int birth_year;
};

我们会从这样的文件中读取关于一群人的数据:

 std::ifstream in("people.txt");
std::vector<person> people((std::istream_iterator<person>(in)),
std::istream_iterator<person>());

然后我们会像这样收集我们关心的数据:

std::map<int, int> year_counts;

for ( auto &p : people)
++year_counts[p.birth_year];

然后我们可以像这样打印出数据:

std::cout << "Year\tCount\n";
for (auto c : year_counts)
std::cout << c.first << "\t" << c.second << "\n";

关于java - 在 Java 或 C++ 等编程语言中有效地模拟 SQL group by 子句,而不是求助于 RDBMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com