以下两个查询给出完全不同的结果的原因是什么?
MariaDB [mydatabase]> SELECT COUNT(DISTINCT(`price`)) FROM `products`; --Good +--------------------------+ | COUNT(DISTINCT(`price`)) | +--------------------------+ | 2059 | +--------------------------+ 1 row in set (0.01 sec) MariaDB [mydatabase]> SELECT COUNT(DISTINCT('price')) FROM `products`; --Bad +--------------------------+ | COUNT(DISTINCT('price')) | +--------------------------+ | 1 | +--------------------------+ 1 row in set (0.01 sec)
我已经在Google周围搜索了反引号和撇号(又称为单引号)之间的区别,但是我找不到任何迹象表明为什么对于像上列这样的列名它们会有不同的解释。
难道实际上不是将后一个查询中的单引号字符串解释为列名,而是解释为任意字符串文字,可以说其为“ 1”吗?如果是这样,要找到任何有关撇号含义的页面并不容易。
“价格”(撇号或引号)是一个字符串。它永远不会改变,因此计数始终为1。
“价格”(背景知识)是指该列price。因此可能会超过1。
price
内括号无关。 COUNT(DISTINCT price)与您的标准版本相同。
COUNT(DISTINCT price)
SELECT COUNT(*) FROM tbl WHERE ...
SELECT foo, COUNT(*) FROM tbl GROUP BY foo
foo
SELECT foo, COUNT(foo) FROM tbl GROUP BY foo
foo IS NULL
SELECT DISTINCT ... GROUP BY ...是胡说八道。使用DISTINCT或使用GROUP BY。
SELECT DISTINCT ... GROUP BY ...