2011-10-04 72 views
1

我工作的系统上添加标签到我的网站,现在这是我的“标签”表:当有相似的行时,获取最大列值的行吗?

URL   | Tag  | UID 
example1.com humor  123 
example1.com humor  342 
example1.com humor  234 
example1.com blog  123 
example1.com blog  432 
example1.com food  221 
example2.com blog  432 

我使用下面的查询,总结标签为每个站点:

SELECT *, COUNT(*) as SUM 
FROM History 
GROUP BY URL, UID 

所以我得到:

URL   | Tag  | Sum 
example1.com  humor 3 
example1.com  blog  2 
example1.com  food  1 
example2.com  blog  1 

最后(这是什么,我不知道该怎么做),我需要为每个分组的URL最大的总和,仅保留2排,所以我知道什么是执行l网站主题:

URL   | Tag  | Sum 
example1.com  humor 3 
example1.com  blog  2 
example2.com  blog  1 

我该怎么做?

+0

你的例子看起来不一致。第二个结果集只有一行'example1',第三个结果集有两个。 – Mat

+0

'SUM(1)'通常写为'COUNT(*)'。 –

+0

您的标签表需要一个主键。有3个“幽默”,2个“博客”和1个“食物”记录这一事实的意义何在?不止一次地说出事情并不会使事情变得更真实。 (URL,Tag)的组合应该是唯一的。当然,这会破坏问题的其余部分,但最好从准确的基础开始,一个基本原则是表格不应包含相同的行。 –

回答

2

尝试在您的结果中使用自联接。 This article有一些很好的例子。从第一个查询中创建一个临时表,然后将其用于第二步(从每个组中获取最大“总和”)可能会更容易(也更快速)嵌套多个查询。请参阅该页面标题为“从每个组中选择前N行”的部分。

+0

我最终创建了一个新表。因为我不知道如何嵌套这个查询。 – lisovaccaro

相关问题