我正在尝试构建一个特定的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引用整个结果而不仅仅是结果的一个“组”。 我希望你能理解我的目标。
答案 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代码慢一点。如果你想提供真实的,可维护的应用程序,我认为“复杂”是一般要避免的。