【发布时间】:2022-07-23 07:41:57
【问题描述】:
我自己写的 SQL sn-p 显然与以下 URL 中指定的语法不谋而合:
Introduction to MySQL WITH Clause
WITH (Common Table Expressions)
你能发现给定的 SQL sn-p 有什么问题吗?
顺便说一句,该解决方案已尝试应用于摘自HackerRank - Contest Leaderboard的问题
WITH
MAX_POINT
AS
(
SELECT HACKER_ID, CHALLENGE_ID, MAX(SCORE)
FROM SUBMISSIONS
GROUP BY HACKER_ID, CHALLENGE_ID
),
HACKER_TOTAL_POINTS
AS
(
SELECT HACKER_ID, SUM(SCORE) AS TOTAL_POINT
FROM MAX_POINT
GROUP BY HACKER_ID
HAVING SUM(SCORE) > 0
)
SELECT T.HACKER_ID, H.NAME,T.TOTAL_POINT
FROM HACKER_TOTAL_POINTS T
INNER JOIN HACKERS H
ON H.HACKER_ID = T.HACKER_ID
ORDER BY T.TOTAL_POINT DESC, T.HACKER_ID;
ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MAX_POINT
AS
(
SELECT HACKER_ID, CHALLENGE_ID, MAX(SCORE)
FROM SUBMISSI' at line 2
【问题讨论】:
-
MAX(SCORE) 没有别名,可能应该别名为 score 以便第二个 cte 可以看到它
-
还有你的mysql版本是多少?您需要 8.0 或更高版本才能使用 cte(我不相信hackerrank)
-
是的,HackerRank 似乎不支持支持
WITH关键字的 MySQL 版本。 -
您可以通过
SELECT VERSION();进行验证 -
此支持页面声称他们使用 MySQL 8.0.20:support.hackerrank.com/hc/en-us/articles/… 但我猜他们可能尚未在所有服务器上都支持它。
标签: mysql common-table-expression