复杂的SQL查询

时间:2010-06-25 10:49:28

标签: sql sqlite

我正在尝试构建一个特定的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个最高值。

仅在排序后设置限制不起作用,因为order by引用整个结果而不仅仅是结果的一个“组”。 我希望你能理解我的目标。

3 个答案:

答案 0 :(得分:1)

它不漂亮,但是......

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;

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

如果可以,请使用更高级的库,如Hibernate for Java或Spring JDBC模板。其他语言还有其他可能性。除非你想浪费时间,否则不要在你的应用程序中编写SQL。

编辑1 :当然,您可能别无选择。您可能正在与未编写的内容进行交互。但是,如果您正在创建自己的数据库,那么当您在应用程序中集成低级,臃肿,不可维护,特定于RDBMS的SQL查询时,这可能表明您做错了什么。我宁愿使用Hibernate并让应用程序运行速度比花费我的开发时间修复SQL代码慢一点。如果你想提供真实的,可维护的应用程序,我认为“复杂”是一般要避免的。