不知道如何使用计算和列联接

时间:2018-12-27 14:29:50

标签: mysql sql

我不知道如何基于计算来联接表。我必须使用一个子字符串来获取需要与另一个表中的列匹配的字符串部分。我无法弄清楚如何加入他们,真的不知道从哪里开始。

我竭尽所能,但我确实参加了初学者的课程,现在不得不自己照顾自己。

df2 <- data.table::fread("id                 cats
111.cats           1,7,1
112.cats           1,1,2|1,3,2
113.cats           1,10,1|1,6,2
114.cats           1,4,2
115.cats           1,5,1
116.cats           1,1,2|1,8,1", data.table = FALSE)

我在Select命令中尝试了上述方法,但发现它不起作用,我需要在join语句中使用计算,但对语法/公式一无所知。尽可能简单地举几个例子将是很好的。我对此还有按顺序分组的问题。

如上所示。

2 个答案:

答案 0 :(得分:0)

通常,join条件看起来像:

from t1 join
     t2
     on t1.empid = concat('%', t2.agent, '%')

或者,您可以只使用表达式:

from t1 join
     t2
     on t1.empid = substring(t2.agent, 4, position('@' in t2.agent) - 4) 

编辑:

对于您的示例代码,我将其编写为:

Select b.attr_employee, . . .   -- aggregation functions go here
From five9_data.calllog cl join
     warbird.user u
     on u.attr_employee = substring(cl.agent, 4, position('@' in cl.calllog.agent) - 4)
Group By u.attr_employee
Order u.attr_employee
Limit 100;

以下是需要注意的更改:

  • 表别名使查询更易于编写和阅读。
  • 使用GROUP BY时,SELECT中唯一未聚合的列应该是GROUP BY键。其余的应该汇总。
  • 您的问题是未定义warbird.attr_employee,因为您错过了表名。但是,u更加易于编写和阅读。

答案 1 :(得分:0)

from t1 join
     t2
     on t1.empid = substring(t2.agent, 4, position('@' in t2.agent) - 4)
相关问题