Сложный SQL-запрос - PullRequest
3 голосов
/ 25 июня 2010

Я пытаюсь создать определенный 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  

Другими словами: 2 старших значения первых x строк.

И только установка предела после сортировки не работает, потому что порядок по относится квесь результат, а не только одна «группа» результата.Я надеюсь, вы понимаете, что я собираюсь сделать.

Ответы [ 3 ]

1 голос
/ 25 июня 2010

Это не красиво, но ..

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;
0 голосов
/ 25 июня 2010

Если вы можете, используйте библиотеку более высокого уровня, такую ​​как Hibernate для Java, или шаблон Spring JDBC. Есть другие возможности на других языках. Не беспокойтесь о написании SQL в вашем приложении, если только вы не хотите терять время.

Редактировать 1 : конечно, у вас может не быть выбора. Вы можете взаимодействовать с чем-то, что вы не написали. Но если вы создаете свою собственную базу данных, когда вы интегрируете низкоуровневые, раздутые, не поддерживаемые, специфичные для СУБД SQL-запросы в свое приложение, это может быть признаком того, что вы делаете что-то не так. Я бы предпочел использовать Hibernate и запускать приложение немного медленнее, чем тратить время на разработку исправления кода SQL. Я думаю, что «сложность» - это то, чего в общем-то следует избегать, если вы хотите создавать реальные поддерживаемые приложения.

0 голосов
/ 25 июня 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...