【问题标题】:Sql where on a computed column count()计算列 count() 上的 Sql where
【发布时间】:2021-07-16 09:37:22
【问题描述】:

我正在尝试搜索用户登录系统的次数。

有一个跟踪 ip、用户和登录时间的表。

我正在尝试一个简单的查询,例如:

select COUNT(*) as loginCount, ip, email from login_attempts where (loginCount LIKE '%1%') group by `email`

但这会导致错误未知列“loginCount”,如果我想搜索在选择中计算的列,该怎么做?

【问题讨论】:

  • count 是一个整数方法。为什么你使用like命令???!!!!!!
  • 请解释你试图实现的逻辑。

标签: sql count where-clause


【解决方案1】:
  select COUNT(*) as loginCount, ip, email from login_attempts
  group by ip, email

或者如果您只对电子邮件感兴趣

  select COUNT(*) as loginCount,email from login_attempts
  group by  email

【讨论】:

    【解决方案2】:

    看起来你想要HAVING

    select COUNT(*) as loginCount, ip, email 
    from login_attempts 
    group by ip, `email`
    having COUNT(*) LIKE '%1%'
    

    【讨论】:

      【解决方案3】:

      这个逻辑:

      loginCount LIKE '%1%'
      

      对于数字来说意义不大。你真的想要像11121134189 但不是22343 这样的值吗?也就是计数中只包含数字1

      即使逻辑是有道理的,但它是在错误的地方,因为您需要在 聚合之后进行过滤。而且,您的聚合与 select 列不一致——ip 不是聚合键,因此请将其从 select 中删除。

      你的具体逻辑写成这样更合适:

      select count(*) as loginCount, email
      from login_attempts
      group by email
      having cast(count(*) as varchar(255)) LIKE '%1%';
      

      这似乎很愚蠢。我想你想要像有一次登录尝试的用户。那将是:

      select count(*) as loginCount, email
      from login_attempts
      group by email
      having count(*) = 1;
      

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        相关资源
        最近更新 更多