我有一个也许很愚蠢的问题。看看下面的查询:
select count(a) as A, count(b) as b, count(a)+count(b) as C
From X
如何在不重复代码的情况下总结这两列:如下所示:
select count(a) as A, count(b) as b, A+B as C
From X
我正在设计一个以不同语言存储数据的数据库(使用UTF-8),因此我认为显示查询结果的最佳方法是在查询本身(因为有不止一种正确的方法)期间根据用户的语言排序,如下所示:
SELECT a < b COLLATE "de_DE" FROM test1;
假设这是处理国际数据的正确方法,那么这是数据库本身的最佳排序规则吗?PostgreSQL文档显示:
C和POSIX排序规则都指定了“传统C”行为,其中只有ASCII字母"A“到"Z”被视为字母,排序严格由字符代码字节值完成。
我觉得这是最好的选择,还是我错了?
(额外的问题是:在查询本身中选择排序规则是否太慢?
例如,我最近研究的一种语言-- Terra。你可以在任何语言中解决这个问题,我对Lua最满意,所以我从这里开始。
Terra语言可以用Lua进行元编程,并且与C向后兼容。C代码可以在其中使用,它的代码可以在C中使用。我将从主页中给出一些代码示例。
terra hello(argc : int, argv : &rawstring)
-- Here we call a C function from Terra
C.printf("Hello, Terra!\n")
return 0
end
-- You can call Terra funct
我在我的代码中注意到了以下查询,并希望检查是否可以对其进行优化。
UPDATE table as T1 SET C1=?
FROM
(SELECT C2, C3, C4
FROM table
WHERE C1=? and current_timestamp >= C5
ORDER BY C5 limit ? FOR UPDATE
) AS T2
WHERE T1.C2 = T2.C2 AND T1.C3 = T2.C3 AND T1.C4 = T2.C4
RETURNING *;
C2,C3上的索引
在C5上