Sql 加入表后按计数排序
我下面的代码目前有效,但在添加Sql 加入表后按计数排序,sql,sql-server,Sql,Sql Server,我下面的代码目前有效,但在添加COUNT之后ORDER BY后,它给了我错误 无效的列名“Answers” 我试图将(Test2.Answers\u for\u考试)计数为第1行中的答案,但也给出了相同的错误消息。 我也可以不显示未找到解决方案的列。我只是在那里添加了它,以便我看到结果,但不需要看到它 在“答案”列下有重复的字符串。我想按最多的字符串数排序。例如:汽车,汽车,纸,石头,纸,纸。我希望首先返回纸张,然后返回car,然后返回rock,因为纸张有3个计数,car有2个计数,rock只有
COUNT
之后ORDER BY
后,它给了我错误
无效的列名“Answers”
我试图将(Test2.Answers\u for\u考试)计数为第1行中的答案,但也给出了相同的错误消息。
我也可以不显示未找到解决方案的列。我只是在那里添加了它,以便我看到结果,但不需要看到它
在“答案”列下有重复的字符串。我想按最多的字符串数排序。例如:汽车,汽车,纸,石头,纸,纸。我希望首先返回纸张,然后返回car,然后返回rock,因为纸张有3个计数,car有2个计数,rock只有1个计数(假设只有3个唯一的字符串)。如果我按答案顺序描述,他们将按字母顺序排列 使用COUNT(*)OVER()
窗口函数执行所需的计数,然后按其排序
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(*) OVER (PARTITION BY Test2.Answers_for_exam) AS AnswerCount
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
ORDER BY AnswerCount DESC
使用COUNT(*)OVER()
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(*) OVER (PARTITION BY Test2.Answers_for_exam) AS AnswerCount
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
ORDER BY AnswerCount DESC
您应该在一个单独的列中记录答案的数量(此处为cnt
),然后按如下顺序排列
SELECT
SOLUTION_NOT_FOUND,
SEARCH_TEST,
Search_Words,
Answers
FROM
(
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(Test2.Answers_for_exam) over ( order by (select 1)) as cnt
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
)T
ORDER BY cnt DESC
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
GROUP BY
Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam
ORDER BY COUNT(Test2.Answers_for_exam) DESC
您也可以像下面这样使用group by
SELECT
SOLUTION_NOT_FOUND,
SEARCH_TEST,
Search_Words,
Answers
FROM
(
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(Test2.Answers_for_exam) over ( order by (select 1)) as cnt
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
)T
ORDER BY cnt DESC
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
GROUP BY
Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam
ORDER BY COUNT(Test2.Answers_for_exam) DESC
您应该在一个单独的列中记录答案的数量(此处为cnt
),然后按如下顺序排列
SELECT
SOLUTION_NOT_FOUND,
SEARCH_TEST,
Search_Words,
Answers
FROM
(
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(Test2.Answers_for_exam) over ( order by (select 1)) as cnt
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
)T
ORDER BY cnt DESC
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
GROUP BY
Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam
ORDER BY COUNT(Test2.Answers_for_exam) DESC
您也可以像下面这样使用group by
SELECT
SOLUTION_NOT_FOUND,
SEARCH_TEST,
Search_Words,
Answers
FROM
(
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers,
COUNT(Test2.Answers_for_exam) over ( order by (select 1)) as cnt
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
)T
ORDER BY cnt DESC
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test
INNER JOIN Test2 ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
GROUP BY
Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam
ORDER BY COUNT(Test2.Answers_for_exam) DESC
您可以按
的顺序使用窗口函数。所以,我想你想要:
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test INNER JOIN
Test2
ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
ORDER BY COUNT(*) OVER (PARTITION BY Test2.Answers_for_exam) DESC;
这应该是实现目标的最简单方法。您可以按的顺序使用窗口函数。所以,我想你想要:
SELECT Test.SOLUTION_NOT_FOUND,
Test.SEARCH_TEST,
Test.KEYWORD as Search_Words,
Test2.Answers_for_exam AS Answers
FROM Test INNER JOIN
Test2
ON Test.TEST_NUMBER = Test2.TEST_NUMBER
WHERE SOLUTION_NOT_FOUND = 1
ORDER BY COUNT(*) OVER (PARTITION BY Test2.Answers_for_exam) DESC;
这应该是实现目标的最简单的方法。你没有
分组方式
,所以这些都没有意义。这是MySQL吗?这有点疯狂。否则,只需按所需的所有列进行分组(但不包括明显的答案)。当你解决了这个问题后,只需将“答案”更改为Test2。考试的答案
难题是我没有任何东西可以分组。从该专栏中获得前10个“答案”是否有解决办法?我使用的是MS SQL Server management Studio。您能否显示表中的数据?您希望得到什么结果?您如何定义前10个答案
?,请解释。为什么不直接使用“按答案排序描述”
?为什么不尝试选择前10名?如果你只是在这里寻找前10名,你可以使用“按答案排序描述考试描述”?因为你没有“按答案排序描述”,所以这一切都没有意义。这是MySQL吗?这有点疯狂。否则,只需按所需的所有列进行分组(但不包括明显的答案)。当你解决了这个问题后,只需将“答案”更改为Test2。考试的答案
难题是我没有任何东西可以分组。从该专栏中获得前10个“答案”是否有解决办法?我使用的是MS SQL Server management Studio。您能否显示表中的数据?您希望得到什么结果?您如何定义前10个答案
?,请解释。为什么不直接使用“按答案排序描述”
?为什么不尝试选择前10名?如果您只是在这里查找前10名,您可以使用“按答案排序描述考试描述”LIMIT 10
按计数返回前10名字符串,但出现了“LIMIT”附近的错误语法错误。请您提供建议。我添加了LIMIT 10
以按计数返回前10个字符串,但出现了“LIMIT”附近的错误错误语法。你能给点建议吗?谢谢!我怎样才能得到前十名的结果?@Jonathan。这是另一个问题。它应该作为一个新问题提出,带有样本数据和期望的结果。谢谢!我怎样才能得到前十名的结果?@Jonathan。这是另一个问题。它应该作为一个新问题提出,包括样本数据和期望的结果。