2011-11-15 62 views
0

我有一个充满媒体的数据库。为了简便起见,可以说,它有选择一列的最大值,由另一列分组是不行的

Table: media 

id 
college_id 
title 
shares 

我试图让来自各个学院的最大量股份的条款。所以,从本质上讲,可以从康奈尔大学,南加州大学,锡拉丘兹大学获得顶级共享文章。

我一直在使用这个SQL命令,但它并没有返回每个大学最共享的文章。

SELECT * 
FROM media 
GROUP BY college_id 
ORDER BY shares DESC 

任何人有什么想法?

股票列是一个整数,指示股票数量。

+1

SQL只是一种查询语言,您使用的是什么服务器/版本? –

+0

@Adam:但我们有一个SQL标准。咳咳。 –

+0

对不起@ muistooshort,我不知道你的意思。 –

回答

4
SELECT top 1 * from media group by college_id order by shares desc 

这是我的第一个想法......虽然我不知道如果我失踪因为这个答案比Adam的简单得多。如果份额是它被共享的次数,虽然这听起来像你要找的东西。

编辑:我明白了。这是另一种方式...

select m1.id, m1.college_id, m1.title, m1.shares 
    from media m1 join 
    (
     select college_id, max(shares) max_shares 
     from media 
     group by college_id 

    ) m2 on m1.college_id = m2.college_id and m1.shares = m2.max_shares 

这将返回一个以上的文章,每个大学在有领带的情况下。如果你想要或不想,我不会。

+0

这与亚当温格的做法非常相似......只是没有CTE而没有分区。不应该是任何在MySql上不起作用的东西。 –

+0

不错的做法布兰登+1 –

+0

这工作太棒了!欣赏它!感谢所有人的帮助。对不起,没有指定这是MySQL的前期(我会确保下一次)。 –

0

如果我们假设股票列控的股数的查询是,

SELECT title, 
     Max(shares) AS max 
FROM media 
GROUP BY college_id 
ORDER BY max DESC 

但如果我们假设股票列是ID或某事,查询会,

SELECT title, 
     COUNT(shares) AS COUNT 
FROM media 
GROUP BY college_id 
ORDER BY COUNT DESC 

我建议你下次再提供更多细节。

+0

这些查询将给出大学内所有文章的所有份额的总数,但它不会告诉哪篇文章的份额最多。 –

+0

股票列保存一个整数,指出股份数量。我尝试了你的第一个查询,但添加了标题...它仍然显示结果的错误标题'SELECT MAX(股份),title作为媒体组的最大值由college_id order by max desc;' –

+0

你是对的@ AdamWenger。更新。 – tuze

0

您正在寻找MAX SQL关键字

在MSSQL这只是正常

SELECT college_id, 
     Max(shares) 
FROM media 
GROUP BY college_id 
相关问题