Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加入表后按计数排序_Sql_Sql Server - Fatal编程技术网

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。这是另一个问题。它应该作为一个新问题提出,包括样本数据和期望的结果。