【发布时间】:2011-10-01 09:30:02
【问题描述】:
我有一个包含 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(),但我希望我明白你的想法。
【问题讨论】:
-
row1 和 row2 是 rows 还是 columns?
-
非常抱歉。当然,它们是列。已编辑。
-
我猜
COUNT(DISTINCT column1, column2)不工作是 SQLite 的限制。