为什么Mysql在使用where子句时返回一个不完整的表?

问题描述 投票:0回答:0

我试图在进行查询时在 WHERE 子句中应用过滤器。我确定列中有数据,但由于某种原因,Mysql 检索到的表不完整。我将结果导出到 csv 文件以查看数据是否存在,确实存在,但这不是我所期望的。我想知道为什么 Mysql 会这样检索结果,以及我的查询是否有问题。

起初,这是我用来创建临时表的查询。

SELECT a.n_tile, a.member_casual, COUNT(ride_length) AS cnt
FROM
 (
 SELECT NTILE(12) OVER (ORDER BY ride_length) AS n_tile, member_casual, rideable_type, ride_length
  FROM length
   )a
GROUP BY 1,2;

这是我得到的桌子

n_tile member_casual 计数
133903
338394
123895
348402

所以当我查询过滤我的数据时,我得到一个空集。

WITH h AS 
 (
SELECT a.n_tile, a.member_casual, COUNT(ride_length) AS cnt
FROM
(
SELECT NTILE(12) OVER (ORDER BY ride_length) AS n_tile, member_casual, rideable_type, ride_length
FROM length
   )a
GROUP BY 1,2
)
SELECT cnt
FROM h
WHERE h.n_tile=1 AND h.member_casual = 'member';

当我将结果导出到 csv 文件以尝试了解数据是否确实存在时,确实如此。但是,格式如下:

n_tile,member_casual,count_rides

  • 1,休闲
  • ,133903
  • 1,会员
  • ,338394
  • 2,休闲
  • ,123895
  • 2,会员
  • ,348402

然而,当我如下所示格式化我的数据,并将其作为表导入 Mysql 时,我能够使用 WHERE 子句过滤我的数据。

n_tile,member_casual,count_rides

  • 1,休闲,133903
  • 1,会员,338394
  • 2,休闲,123895
  • 2,成员,348402
n_tile member_casual 计数
1 休闲 133903
1 会员 338394
2 休闲 123895
2 会员 348402

现在我的表是这样的,下面的查询按预期工作

WITH h AS 
 (
SELECT a.n_tile, a.member_casual, COUNT(ride_length) AS cnt
FROM
(
SELECT NTILE(12) OVER (ORDER BY ride_length) AS n_tile, member_casual, rideable_type, ride_length
FROM length
   )a
GROUP BY 1,2
)
SELECT cnt
FROM h
WHERE h.n_tile=1 AND h.member_casual = 'member';

但是,我不明白为什么 Mysql 向我显示不完整的表。我的查询有什么问题吗?

mysql where-clause
© www.soinside.com 2019 - 2024. All rights reserved.