ПРОБЛЕМА Сортировки SQL с GROUP BY - PullRequest
0 голосов
/ 19 августа 2011
SELECT TOP 10 tb_show.showId, tb_Show.Title, tb_Show.PageName, Quantity
FROM         tb_OrderItem INNER JOIN
                        (SELECT * FROM tb_Show WHERE IsDeleted = 0 AND PrivateShow = 0 AND Archive = 0 ) tb_Show
                      ON tb_OrderItem.ShowId = tb_Show.showId             
GROUP BY tb_show.showId, tb_Show.Title, tb_Show.PageName, Quantity
ORDER BY Quantity DESC 
  • 160 дсадсадсадса дсадсадсадса 3
  • 160 дсадсадсадса дсадсадсадса 2
  • 150 css-тестирование карты-событие-css-map-test-event 1
  • 159 тест на поперечные впадины тест на перекрестные впадины 1

Но я не хочу повторять ID, т.е. 160. Поэтому я сделал это подзапросом и получил только три столбца с ключевыми словами DISTINCT. Проблема в том, что сортировка по количеству не работает, когда я перемещаю его в подзапрос с помощью DISTINCT ключевые слова без сортировки - это хорошо, но отдельные ключевые слова удаляют сортировку ...


SELECT DISTINCT TOP 10 showId, Title, PageName  from 
( SELECT TOP 10 tb_show.showId, tb_Show.Title, tb_Show.PageName, Quantity
FROM         tb_OrderItem INNER JOIN
                        (SELECT * FROM tb_Show WHERE IsDeleted = 0 AND PrivateShow = 0 AND Archive = 0 ) tb_Show
                      ON tb_OrderItem.ShowId = tb_Show.showId             
GROUP BY tb_show.showId, tb_Show.Title, tb_Show.PageName, Quantity
ORDER BY Quantity DESC ) tb_show
  • 150 css-карт-тест-событий
  • 159 Крест-пустот тест Кросс-пустот-тест
  • 160 дсадсадсадса дсадсадсадса

1 Ответ

2 голосов
/ 19 августа 2011

Это даст вам вывод во втором примере.Причина, по которой отдельный подзапрос не работал для вас, заключалась в том, что вы также группировали по количеству, что приводило к выводу отдельных отдельных строк.

SELECT TOP 10 tb_show.showId, tb_Show.Title, tb_Show.PageName, MAX(quantity) as Quantity
FROM tb_OrderItem 
    INNER JOIN tb_Show 
        ON tb_OrderItem.ShowId = tb_Show.showId 
WHERE tb_show.IsDeleted = 0 AND tb_show.PrivateShow = 0 AND tb_show.Archive = 0 
GROUP BY tb_show.showId, tb_Show.Title, tb_Show.PageName
ORDER BY MAX(quantity)
...