【发布时间】:2023-03-17 02:58:01
【问题描述】:
说明:
Julia 要求她的学生创造一些编码挑战。编写查询以打印hacker_id、姓名和每个学生创建的挑战总数。按挑战总数降序排列您的结果。如果多个学生创建了相同数量的挑战,则按hacker_id 对结果进行排序。如果多个学生创建了相同数量的挑战,并且计数小于创建的最大挑战数量,则将这些学生排除在结果之外。
这是我的 SQL 代码:
SELECT
H.HACKER_ID AS 'HACKER_ID', NAME,
COUNT(NAME) AS 'COUNT1'
FROM
HACKERS H
JOIN
CHALLENGES C ON H.HACKER_ID = C.HACKER_ID
GROUP BY
H.HACKER_ID, NAME
HAVING
COUNT1 = (SELECT MAX(S1.COUNT3)
FROM
(SELECT COUNT(HACKER_ID) AS 'COUNT3'
FROM CHALLENGES
GROUP BY HACKER_ID) AS S1)
OR COUNT1 IN (SELECT S2.COUNT2
FROM
(SELECT HACKER_ID, COUNT(HACKER_ID) AS 'COUNT2'
FROM CHALLENGES
GROUP BY HACKER_ID) AS S2
GROUP BY
S2.COUNT2
HAVING
COUNT(S2.COUNT2) = 1)
ORDER BY
COUNT1 DESC, H.HACKER_ID;
问题:
其实这段代码可以在Mysql环境下运行,得到正确的结果,但是在SQL Server环境下不能运行,报错
列名“COUNT1”无效
我想问一下SQL Server中的确切错误是什么以及Mysql和SQL Server之间有什么区别,因为这个错误只发生在SQL Server中而不发生在Mysql中
【问题讨论】:
标签: sql sql-server join count having-clause