gpt4 book ai didi

sql - 优化两个COUNT/DISTINCT查询

转载 作者:行者123 更新时间:2023-12-03 15:46:54 26 4
gpt4 key购买 nike

我有一个带有column1和column2的表(它们都包含TEXT)。我想得到:

1)column1 @ table的唯一行数,不区分大小写

2)column1 @ table和column2 @ table的唯一行数,不区分大小写

SELECT count(*) AS unique_row1 FROM (SELECT DISTINCT lower(column1) FROM table);

SELECT count(*) AS unique_rows12 FROM (SELECT DISTINCT lower(column1),lower(column1) FROM table);


有更有效的方法吗?有没有办法在一个查询中做到这一点?我使用SQLite3。

提前致谢。

编辑(由于 @ypercube's response):
默认为排序规则(区分大小写,至少我在任何地方都没有执行 COLLATE NOCASE)。

我也进行了测试,使用 COLLATE NOCASE速度更快,并且数字相同:

# time echo "SELECT count(DISTINCT lower(column1)), count(DISTINCT lower(column1 || column2)) FROM table;" | sqlite3 db.sqlite3
1643|5997
echo 0.00s user 0.00s system 25% cpu 0.003 total
sqlite3 db.sqlite3 0.58s user 0.04s system 96% cpu 0.643 total

# time echo "SELECT count(DISTINCT column1), count(DISTINCT column1 || column2) FROM table;" | sqlite3 db.sqlite3
1658|6199
echo 0.00s user 0.00s system 36% cpu 0.002 total
sqlite3 db.sqlite3 0.42s user 0.04s system 95% cpu 0.483 total

# time echo "SELECT count(DISTINCT column1 COLLATE NOCASE), count(DISTINCT (column1 || column2) COLLATE NOCASE) FROM table;" | sqlite3 db.sqlite3
1643|5997
echo 0.00s user 0.00s system 32% cpu 0.002 total
sqlite3 db.sqlite3 0.43s user 0.04s system 98% cpu 0.481 total


COUNT(DISTINCT column1, column2)显示错误: wrong number of arguments to function count(),但我希望我有你的主意。

最佳答案

您可以尝试以下方法:

SELECT count(distinct lower(column1))
FROM table


第二:

SELECT count(distinct lower(column1 || column2))
FROM table


注意:在第二种情况下,如果列可以为空,则必须使用合并。

关于sql - 优化两个COUNT/DISTINCT查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619368/

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