我为什么要在SQL中返回此语法错误?

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

我对SQL和编码一般还是陌生的。我没有在其中找到语法错​​误。

SELECT t1.artist, t1.year, t2.total
FROM tutorial.billboard_top_100_year_end AS 't1'
  JOIN (SELECT billboard_top_100_year_end.artist, COUNT(*) AS 'total'
    FROM tutorial.billboard_top_100_year_end
    GROUP BY year) AS 't2'
  ON t1.artist = t2.artist AND t1.total = t2.total
WHERE artist LIKE 'Elvis%'
LIMIT 100;

这导致

错误:“ t1”处或附近的语法错误位置:149选择t1.artist,t1.year,t2.total从tutorial.billboard_top_100_year_end AS't1'^加入(SELECT billboard_top_100_year_end.artist,COUNT(*)个“总计”]

在此之前我收到错误

错误:列必须出现在GROUP BY子句中或在聚合函数中使用

并进行了调整以解决此问题

任何帮助将不胜感激!

sql sqlite syntax group-by
1个回答
0
投票

查看您提供给我们的代码段中有很多与众不同的地方。

AS语法

您的AS 'x'语句不正确。

您可以不使用换行,也可以使用反引号,但不支持单引号。

AS `t1` -- Correct.
AS t1 -- Correct.
AS 't1' -- This is a syntax error.

歧义参考

另外,在查询末尾附近

WHERE artist LIKE 'Elvis%'

artist不明确。您是指哪个艺术家?以下任何一种都可以。

WHERE t1.artist LIKE 'Elvis%' -- Or
WHERE t2.artist LIKE 'Elvis%'

困惑的GROUP BY

此外,您的GROUP BY陈述没有多大意义。您试图获取按year分组的每一行的计数。但是您似乎也想在行中使用artist。但是,您不能在一年中将所有艺术家都放在一个专栏中。您还需要按artist分组。此外,除非选择它们,否则您将无法看到正在分组的year

SELECT artist, year, COUNT(*) AS `total`
    FROM tutorial.billboard_top_100_year_end
    GROUP BY artist, year

您的查询可能有更多错误,但是从阅读中可以明显看出这是唯一的错误。

如果您希望人们发现与此有关的更多问题,则需要提供一个最小的工作示例(包括创建表等)。将来,我建议先构建一个有效的查询,然后再添加它以获取所需的内容,并确保每次进行更改时都运行该查询。这样,您就可以在添加故障后立即发现它们,而不是构建包含许多同时出现的问题的完整查询。

© www.soinside.com 2019 - 2024. All rights reserved.