【问题标题】:Counter for more than one occurrence in column for MySQLMySQL 列中多次出现的计数器
【发布时间】:2015-01-18 02:48:29
【问题描述】:

In the MySQL solution here。我正在尝试为列 DevelopmentName 选择 Distinct,但也只想提取名称多次出现的计数。我遇到语法错误,并尝试在列名和计数指令之间使用逗号?

SELECT DevelopmentName count(*) as Counter
  FROM sunshinemls_property_res WHERE Counter > 2
   AND City = 'Bonita Springs' OR City = 'Estero'
    OR City = 'Naples' OR City = 'Marco Island'
 ORDER BY DevelopmentName ASC

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: mysql sql


【解决方案1】:

您的查询中有几个小的逻辑错误:

  • select 中缺少逗号
  • where 中的逻辑错误(如果 where 有效,它将无法正常工作,因为您需要为所需逻辑提供括号)
  • > 2 当你想要 > 1
  • 缺少group by 子句

不过,最大的问题是在where 子句中使用counter。这个逻辑应该放在having

SELECT DevelopmentName, count(*) as Counter
FROM sunshinemls_property_res
WHERE City IN ('Bonita Springs', 'Estero', 'Naples', 'Marco Island')
GROUP BY DevelopmentName
HAVING count(*) > 1
ORDER BY DevelopmentName ASC;

在 MySQL 中,您可以说 HAVING Counter > 1。然而,并不是所有的数据库都支持这种语法,所以我通常只是重复聚合表达式。

【讨论】:

  • 完美,也感谢您的详细解释,尤其是柜台……这对推动这一进程有很大帮​​助。
【解决方案2】:

一定会成功的

select Distinct(DevelopmentName),count(*) as Counter from sunshinemls_property_res where City in ('Bonita Springs', 'Estero','Naples','Marco Island') Group by DevelopmentName Having Counter >= 2;

您不能在 where 子句中使用 Counter 别名,因为 mysql 会尝试搜索该表的列名。所以在 where 子句中不允许使用别名。所以为了避免你可以使用 group by 和 having 子句。

【讨论】:

  • DISTINCT 不是函数
  • GROUP BY也不需要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多