【问题标题】:Mysql Count() not workingMysql Count()不起作用
【发布时间】:2017-11-24 09:50:26
【问题描述】:

students_records

+----+-----+-----+-------+
| Sr | SRN | ARN | Marks |
+----+-----+-----+-------+
| 1  | ge  | aj  |  10   |
| 2  | ge  | bd  |   4   |
+----+-----+-----+-------+  

从上面的数据库中,我想计算 Rows 的数量 小于 ' 5 并且 ARn 值 不等于 ' !='" N. 所以对于上面的例子,计数应该是 **1 但我的代码是 2

代码:

SELECT COUNT(Sr) AS Sr FROM students_records WHERE ARN != 'N' AND Marks <= '5'

【问题讨论】:

  • 你能告诉$ua$mr的值是什么吗?
  • make 标记数字字段,而不是 varchar
  • @Rafee 问题已编辑!
  • 如果我对该表运行该查询,我会得到正确的结果。您可以运行DESCRIBE students_records 向我们展示您的表结构吗?
  • Marks + 0 &lt;= 5

标签: mysql


【解决方案1】:

理想情况下,您应该将字段类型更改为整数,因为这是存储的内容。如果这不可能,您可以在查询时强制转换字段,如下所示:

SELECT COUNT(Sr) AS Sr FROM t WHERE ARN != 'N' AND cast(Marks AS UNSIGNED) <= '5';

但是当您获得更大的数据集时,这可能会很慢。

您还可以通过删除 "5" 周围的引号来隐式执行转换,如下所示:

SELECT COUNT(Sr) AS Sr FROM t WHERE ARN != 'N' AND Marks <= 5;

【讨论】:

  • 但这很可能...... ,您的意思是说与将类型更改为整数相比,该过程会很慢?
  • @PBMusics 没错。将值存储为正确的类型意味着运行查询时的处理更少。
  • 好的,因为我会去你提到的第二个查询,并记住那件事。但是这样做,是没有出错的可能还是有?
  • 只要Marks 只包含看起来像整数的字符串,你应该没问题。如果是这种情况,您绝对应该更改列类型。
  • 如果Marks 中的所有值都是整数,则应将该列设为int 列。那个案子。
【解决方案2】:

这里唯一真正的解决方案是将marks的字段类型从varchar更改为像integer这样的数字数据类型。

一个丑陋的解决方法是

where cast(marks as unsigned) <= 5

【讨论】:

猜你喜欢
  • 2014-08-04
  • 2017-04-28
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多