2016-07-07 5 views
1

Я пытаюсь запустить этот запрос;SQL - Ограничить количество результатов в группе по

SELECT artist, song, track, album, album_id, art, COUNT(artist) AS artistCount FROM listening_artist GROUP BY artist ORDER BY COUNT(artist) DESC 

Это хорошо работает, но я бы хотел, чтобы он работал только из 30 результатов из базы данных, а не из полной базы данных.

я попробовал эту

SELECT artist, song, track, album, album_id, art, COUNT(artist) AS artistCount FROM listening_artist LIMIT 30 GROUP BY artist ORDER BY COUNT(artist) DESC 

Который ничего не возвращает.

Я не после этого

SELECT artist, song, track, album, album_id, art, COUNT(artist) AS artistCount FROM listening_artist GROUP BY artist LIMIT 30 ORDER BY COUNT(artist) DESC 

Как было бы слишком поздно для предела.

Что это за

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

Моя база данных

+------------+----------+---------+---------+------------+-------+ 
| artist | song | track | album | album_id | art | 
+------------+----------+---------+---------+------------+-------+ 
| T-Swift | 22  | *NULL* | Red | 9282781 | URL | 
|   |   |   |   |   |  | 
+------------+----------+---------+---------+------------+-------+ 

Любая помощь приветствуется. Благодаря!

+0

Ваш «ничего не возвращает» - это синтаксическая ошибка, которая предполагает, что в вашем коде нет обработки ошибок, чтобы обнаружить, когда запрос взорвался. Прочтите синтаксис: [select] (http://dev.mysql.com/doc/refman/5.7/en/select.html) –

+0

Примените предел в производной таблице (подзапрос) и узнайте, как форматировать Select-statement , – dnoeth

+0

Зачем вам нужен «GROUP BY». Это похоже на ошибку или неопределенное поведение. – Michas

ответ

0

Как уже указывалось в комментариях, ваш второй запрос не возвращает результатов, потому что синтаксис недействителен.

Вместо этого используйте саб выберите, чтобы ограничить результаты:

SELECT artist, song, track, album, album_id, art, COUNT(artist) AS artistCount 
FROM (
     SELECT * 
     FROM listening_artist 
     LIMIT 30 
    ) AS recent_listening_artist 
GROUP BY artist 
ORDER BY COUNT(artist) DESC 

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

Вы не указали свою фактическую СУБД, поэтому вам может потребоваться слегка настроить синтаксис (это MySQL), но он должен хотя бы дать вам подсказку в правильном направлении.

Обратите внимание, что это даст вам только одну строку для каждого исполнителя, что делает запись треков или альбомов на выходе немного бессмысленной. См. Также this MySQL fiddle для небольшой демонстрации.

+0

Спасибо! Он работал блестяще! Я сделал обходной путь, но я использую это сейчас. –

Смежные вопросы