Mysql SQl查询理解

Mysql SQl查询理解,mysql,sql,Mysql,Sql,今天我正在处理一个SQL查询,我只想在得到查询中显示的差异后得到count,但它显示了冗余的count值。请解释一下这是怎么回事 select ((select count(city) from station) - (select count(distinct city) from station)) from station; 当我使用DISTINCE时,问题就解决了。 因此,请帮助我更好地理解SQL查询。如果您只需要两个子查询的计数之间的一个差值,请尝试从dual表中选择: SELECT

今天我正在处理一个SQL查询,我只想在得到查询中显示的差异后得到count,但它显示了冗余的count值。请解释一下这是怎么回事

select ((select count(city) from station) - (select count(distinct city) from station))
from station;
当我使用DISTINCE时,问题就解决了。
因此,请帮助我更好地理解SQL查询。

如果您只需要两个子查询的计数之间的一个差值,请尝试从
dual
表中选择:

SELECT
    (SELECT COUNT(city) FROM station) - (SELECT COUNT(DISTINCT city) FROM station) AS diff
FROM dual;
但实际上,您甚至可以在不使用子查询的情况下执行此操作:

SELECT
    COUNT(city) - COUNT(DISTINCT city) AS diff
FROM station;

您可以通过减少Select子句的数量来采用不同的方法

  • 在a中,获取单个选择中的计数
  • 使用派生表的结果来计算差异
请尝试以下操作:

SELECT derived_t.total_city_count - derived_t.unique_city_count AS difference 
FROM 
(
  SELECT COUNT(city) AS total_city_count, 
         COUNT(DISTINCT city) AS unique_city_count
  FROM station
)

“双关键字”是什么意思?还有一个查询,我必须找到城市名称的长度,然后根据长度找到最大和最短的城市名称,那么我如何在SQL中找到它?@AnujSingh这听起来是另一个问题的一个很好的主题。但是,这与你问的问题没有直接关系,所以我不在这里回答。@TimBiegeleisen你确定你对
DUAL
的描述是100%正确吗?据我所知,MySQL中的
DUAL
只包含一行(就像在Oracle中一样)。如果不包含行,
SELECT FROM dual
将永远不会返回任何内容。@FrankSchmitt是的,
dual
只有一行,我删除了我的注释。MySQL甚至不需要它,但使用它也没有什么错。你是在问MySQL(标签不合适的地方)还是Oracle数据库(标签不合适的地方)?