【问题标题】:Hacker Rank Question SQL Advanced Mysql query Incorrect syntax (only full group by mode)Hacker Rank Question SQL Advanced Mysql query 语法不正确(只有full group by模式)
【发布时间】:2022-01-11 09:57:23
【问题描述】:

问题:

Julia 举办了为期 15 天的 SQL 学习竞赛。比赛开始日期为 2016 年 3 月 1 日,结束日期为 2016 年 3 月 15 日。

编写查询以打印每天至少提交的唯一黑客总数(从比赛的第一天开始),并找到hacker_id 和每天提交最多的黑客的姓名.如果不止一个这样的黑客有提交的最大数量,打印最低的hacker_id。查询应打印比赛每一天的此信息,按日期排序。

输入格式
下表包含比赛数据:

  • Hackershacker_id是黑客的id,name是黑客的名字。
  • Submissionssubmission_date是提交的日期,submission_id是提交的id,hacker_id是提交的黑客的id,score是提交的分数。

示例输入
对于以下示例输入,假设比赛的结束日期是 2016 年 3 月 6 日。

Hackers Table
Submissions Table

样本输出

2016-03-01 4 20703 Angela
2016-03-02 2 79722 Michael
2016-03-03 2 20703 Angela
2016-03-04 2 20703 Angela
2016-03-05 1 36396 Frank
2016-03-06 1 20703 Angela

到目前为止,我的查询如下:

SELECT DISTINCT
  @s := submission_date,
  COUNT(DISTINCT hacker_id),
  @h := (SELECT hacker_id
         FROM (SELECT DISTINCT
                 hacker_id,
                 @ch := COUNT(hacker_id)
               FROM Submissions
               WHERE submission_date=@s
               ORDER BY @ch
               GROUP BY hacker_id DESC) x
         LIMIT 1),
  @n:=(SELECT name FROM Hackers WHERE hacker_id=@h)
FROM
  Submissions
WHERE 1;

好吧,这个查询失败了'SQL sytax error'{MYSQL},但是没有GROUP BY,这个查询被拒绝,因为激活了 only-full-group-by 模式。

错误信息是:

第 5 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'GROUP BY hacker_id DESC) x LIMIT 1),@n:=(SELECT name FROM Hackers WHERE hacker_i' 附近使用正确的语法

【问题讨论】:

  • MySQL SQL Server - 请更正您的标签。
  • 示例输入 提供示例输入,从而将示例输出显示为完整的 CREATE TABLE + INSERT INTO 脚本。

标签: mysql sql syntax


【解决方案1】:

你没有在 WHERE 后面提到列名。

试试这个:

SELECT <your query> FROM Submissions WHERE <column name> = 1;

我认为这对你会有帮助。

【讨论】:

    【解决方案2】:

    虽然这并没有提供正确的答案,但按照 Danyal 先生的建议更改查询解决了语法问题。 以下是最终查询:

    SELECT DISTINCT
      @s := submission_date,
      COUNT(DISTINCT hacker_id),
      @h := (SELECT hacker_id
             FROM Submissions 
             WHERE submission_date=@s 
             GROUP BY hacker_id 
             ORDER BY COUNT(hacker_id) 
             DESC LIMIT 1),
      @n:=(SELECT name FROM Hackers WHERE hacker_id=@h)
    FROM
      Submissions
    WHERE 1 GROUP BY submission_date;
    

    【讨论】:

    • 您接受的答案不可能是正确的,因为您的表中没有包含 1 的列。您在此处显示的代码也没有使用&lt;column name&gt; = 1。将不相关的答案标记为已接受是对未来读者的伤害。更重要的是,任何消除语法错误的答案都是正确的,无论它查询什么数据。
    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多