2014-11-22 57 views
0

查询:如何通过使用内部联接进行重复来订购SQL?

SELECT results.Title, results.Tags 
FROM results 
INNER JOIN tags 
ON results.ID = tags.ID 
WHERE tags.Tag 
IN (?,?,?) 

上述返回很多重复的。我想要命令结果,大部分重复在顶部。按标签列的数量排序。 (results.Tags)

我然后将组的结果

GROUP BY results.ID 

实施例的结果:

​​

期望的结果:在顶部

Title  Tags 
Book 1  Trees, Mountains, Rivers 
Book 4  Dogs, Cats, Rivers 
Book 9  Blue, Green, Rivers 

重复。

我试过了。它虽然失败了:

SELECT results.Title, results.Tags 
FROM results 
INNER JOIN tags 
ON results.ID = tags.ID 
WHERE tags.Tag 
IN (?,?,?) 
ORDER BY COUNT (Tags) //This makes the query error 
GROUP BY results.ID 
+0

是内在的目的纯粹联接去除什么都没有在该表中的结果吗?我问,因为你没有选择任何东西。 – 2014-11-22 21:03:00

+0

WHERE tags.Tag。我正在使用JOIN消除行。 – seamus 2014-11-22 21:04:25

+0

'按'排序在'按组'旁边。 – 2014-11-22 21:10:55

回答

1

从你的尝试,这是我想通了。可能你必须使用子查询。如果你能提供一些示例数据将是

SELECT TITLE,TAGS,COUNT(*) 
FROM 
    (
     SELECT results.Title as Title , results.Tags as Tags 
     FROM results 
     INNER JOIN tags 
     ON results.ID = tags.ID 
     WHERE tags.Tag 
     IN (?,?,?) 
) 
GROUP BY TITLE,TAGS 
ORDER BY TAGS DESC 
2
SELECT X.Title, 
     X.Tags, 
     X.CNT 
FROM 
    (SELECT results.ID 
      count(tags.ID) AS CNT 
    FROM results 
    INNER JOIN tags ON results.ID = tags.ID 
    WHERE tags.Tag IN (?, ?, ?) 
    GROUP BY results.ID) X 
INNER JOIN tags ON X.ID = tags.ID 
ORDER BY X.CNT 
0
SELECT Title, Tag, count(a.ID) AS CNT 
FROM ( 

    SELECT results.Title, tags.Tag, results.ID 
    FROM results 
    INNER JOIN tags 
    ON results.ID = tags.results_ID 
    WHERE tags.Tag 
    IN (?,?,?) 

) AS a 
GROUP BY a.ID 
ORDER BY CNT DESC"; 

我添加了一个ID列清楚得多。 创建主查询。用圆括号括起来并给它加上标签。

(main query) AS a 

然后在上面选择你想要的信息。在我的情况下,重复计数。

SELECT COUNT(a.id) FROM (main query)AS a 

在括号组后结束重复的,责令由数量

GROUP BY a.ID 
    ORDER BY CNT DESC 
相关问题