首页 > 解决方案 > 我在 SQL 中一周大。我不明白这个错误,“第 1 行的错误 1054 (42S22):‘字段列表’中的未知列‘S.hacker_id’”

问题描述

SELECT submission_date, COUNT(hacker_id)
FROM (SELECT S.submission_date, COUNT(DISTINCT S.hacker_id) FROM Submissions S
      GROUP BY S.submission_date) TMP
HAVING COUNT(*) > 14;

谁能解释导致错误的原因。对不起这个琐碎的问题。数据集有 15 个日期。每天,黑客都会提交多项挑战。我想查询每天提交至少 1 个查询的唯一黑客。我的方法是......使用子查询,我将在一天内消除重复项。然后主查询将给我在所有 15 天出现的hacker_id。

标签: mysqlsql

解决方案


这是您的查询:

SELECT submission_date, COUNT(hacker_id)
FROM (SELECT S.submission_date, COUNT(DISTINCT S.hacker_id)
      FROM Submissions S
      GROUP BY S.submission_date
     ) TMP
HAVING COUNT(*) > 14;

查询有几个问题:

  1. COUNT(DISTINCT S.hacker_id)在子查询中,但您尚未为其分配名称。
  2. 外部查询有一个聚合函数COUNT(),但没有GROUP BY
  3. 外部查询 has HAVING,通常用于在 a 之后进行过滤GROUP BY。但没有 aGROUP BY它没有意义。

目前尚不清楚您要做什么,因此我无法就如何解决这些问题提出建议。嗯,除了第一个。

如果你想要超过 14 个不同的黑客 ID 的日期,你可以使用:

SELECT S.submission_date, COUNT(DISTINCT S.hacker_id) as num_hacker_ids
FROM Submissions S
GROUP BY S.submission_date
HAVING num_hacker_ids > 14;

推荐阅读