复杂的SQL查询
我想构建一个特定的SQL查询,但我不知道如何实现我想要的。
我的数据库看起来是这样的:复杂的SQL查询
Col1 Col2
"a" 5
"b" 7
"a" 8
"a" 7
"b" 5
"b" 7
"c" 3
"a" 4
"b" 3
"b" 4
"c" 1
而且我想返回像这样的查询:
"a" 8
"a" 7
"b" 7
"b" 7
在口头上:第一个x串的2个最高值。
只有在排序后才放置限制不起作用,因为顺序是指整个结果,而不仅仅指结果的一个“组”。 我希望你明白我的意思。
select tbl.col1, tbl.col2 from tbl inner join
(select col2 from tbl order by col2 desc Limit 2) as t1 on
t1.col2 = tbl.col2 order by tbl.col1,tbl.col2
如果可以,请使用Hibernate for Java或Spring JDBC模板等更高级别的库。其他语言还有其他可能性。除非你想要失去时间,否则不要在你的应用程序中编写SQL。
编辑1:当然,你可能别无选择。你可能会与你没有写的东西进行交互。但是,如果您要创建自己的数据库,那么当您在应用程序中集成低级的,臃肿的,不可维护的,特定于RDBMS的SQL查询时,这可能表明您正在做错某些事情。我宁愿使用Hibernate,并让应用程序运行速度慢于花费我的开发时间修复SQL代码。如果你想提供真实的,可维护的应用程序,我认为“复杂”是一般应避免的事情。
我不明白为什么有人降低了这一点。它没有回答这个问题,而是指出用户有更好的方法来解决他的问题。如果我是提问者,我更喜欢这样的答案。 – 2010-06-25 12:20:26
@Matteo Mosca:我很同情这是因为这是一个不特别关系的任务(发布的数据甚至没有关键字!)但是,“不要在你的应用程序中编写SQL”麻烦一点一般化,你不觉得吗? – onedaywhen 2010-06-25 13:08:30
那么,我认为如果我可以在更高层次的抽象(比如Linq和实体框架)上工作,那么它仍然会产生下面的质量SQL,为什么我应该为编写我的应用程序编写sql而烦恼呢? 不同的故事,如果你需要为其他需求编写sql,这些视图直接存储在数据库,存储过程等,但现在为.Net应用程序,如果你可以使用Linq和和ORM,Sql真的被弃用。无论如何,这只是我的看法。 – 2010-06-25 13:59:31
这是不漂亮,但..
SELECT * FROM
(SELECT DISTINCT col1,
(SELECT col2 FROM tbl WHERE tbl.col1 = a.col1 ORDER BY col2 DESC LIMIT 1) FROM tbl a
UNION ALL
SELECT DISTINCT col1,
(SELECT col2 FROM tbl WHERE tbl.col1 = a.col1 ORDER BY col2 DESC LIMIT 1 offset 1) FROM tbl a)
ORDER BY 1,2 DESC;
“第X串” 命令怎么样?按最高col2? – Blorgbeard 2010-06-25 10:54:26
是的,但这并不重要。 我不明白的是切割结果。 – Graslandpinguin 2010-06-25 11:06:29