【发布时间】:2012-10-05 20:51:45
【问题描述】:
我有一张桌子:
c1|c2|c3|c4
-----+--+--+----
a b c 10
a a b 20
c a c 10
b b c 10
c b c 30
我想编写一个函数,其中输入是 3 个字符串/文本,例如('abc、bd、c'),比较每个元素彼此,查找是否存在此组合的行,将第 4 (c4) 列的数量相加。但是,如果有 b a c 或 c a b 的星座,它将匹配 a b c 10。如果有像 b c c 这样的行,那么它不会是像 c b b 这样的行。每场比赛都是独一无二的。
我认为最好使用 string_to_array(text, text)。
我整理了一些伪代码,但不知道如何用 SQL 编写它。可能逻辑也错了。
function (x,y,z)
res = 0
x_array = string_to_array(x, ' ')
y_array = string_to_array(y, ' ')
z_array = string_to_array(z, ' ')
foreach(x_item in x_array)
foreach(y_item in y_array)
foreach(z_item in z_array)
if (c1 = (x_item || y_item || z_item ) && c2 = (x_item || y_item || z_item ) && c3 = (x_item || y_item || z_item ))
res++
编辑
- 首先,示例表中有一个错误。有一行a b c和c b a。不可能。 a b c = c b a !并且每一行都必须是唯一的。
- 示例:三个文本输入a b c | b c | c
- 每个元素与每个元素:a b c、a c c、b b c、b c c、c b c、c c c
- a b c = 10; a c c(与c a c相同)= 10; b b c = 10; b c c(与c b c相同)= 30; c b c = 30; c c c (不匹配) = 0;结果 = 90
【问题讨论】:
-
你能澄清你的文字吗?这对我来说似乎很矛盾。特别要明确你的结果应该是什么样子。添加示例。
-
新用户提示:如果您发现某些答案有帮助/有用,您可能需要接受/点赞。
标签: arrays function postgresql