Postgres:如何限制查询以返回一个企业?

时间:2018-09-10 22:38:55

标签: sql postgresql

我的查询不断返回两个具有前缀名称的企业,我想将其限制为一个。

    SELECT e.company,
       to_char(a.timestamp, 'yyyy/mm')AS "Year, Month",
       count(1)AS "Total Actions"
FROM activities a
JOIN users u ON a.trackid=u.trackid
JOIN enterprises e ON u.company=e.company
WHERE TIMESTAMP > (CURRENT_DATE - interval '12 months')
  AND user_state = 'active'
  AND user_type != 'BAR'
  AND enterprise LIKE 'Foo Enterprise'
  And enterprise != 'Foo Cyber'
  AND LEFT(actionname, 4) NOT IN
    (SELECT actionname
     FROM Actions
     WHERE action_group='NoUserAction')
GROUP BY e.company,
         to_char(a.timestamp, 'yyyy/mm')
ORDER BY to_char(a.timestamp, 'yyyy/mm') DESC, e.company

我的结果显示“ Foo Enterprise”和“ Foo Cyber​​”都不想看到“ Foo Cyber​​”。

即使使用NOT LIKE'%cyber%',此查询也返回的数据示例如下:

Foo Cyber​​ 2018/09 192

Foo Enterprise 2018/09 191

Foo Cyber​​ 2018/08 406

Foo Enterprise 2018/08 1457

Foo Cyber​​ 2018/07 2144

Foo Enterprise 2018/07 1106

2 个答案:

答案 0 :(得分:0)

您可以尝试将查询条件更改为以下示例:

  And enterprise not like 'Foo Cyber'

OR

更低的(企业)不像'%cyber%'

您所拥有的查询应该可以正常工作,因此可能存在空格或大写/小写的情况。

更新

问题是您正在显示e.company,但您尝试使用Enterrise进行过滤。

请将变量更改为e.company。例如:

`和e.company不喜欢“ Foo Cyber​​”

答案 1 :(得分:0)

此逻辑:

WHERE  . . .
      AND enterprise LIKE 'Foo Enterprise'
      AND enterprise != 'Foo Cyber'
       . . .

只能返回'Foo Enterprise'(所有布尔表达式都使用AND连接)。第一个条件是相当严格的-比!=更为严格。

我认为您的实际查询有些不同。