SQL Таблица заказов по столбцу group_concatenated с большинством результатов, равными нулю - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь упорядочить таблицу по столбцу (Tavling), где был применен GROUP_CONCAT, однако я не могу упорядочить список так, чтобы он шел сверху вниз, начиная со строки, содержащей наибольшее количество результатов из функция GROUP_CONCAT.

Таким образом, в этом случае он должен начинаться со строки, содержащей 3 результата из функции GROUP_CONCAT, затем строк, содержащих 2 результата, затем 2 строк, содержащих один результат и, наконец, нулевое значение.

Желаемый результат:

+-------------------+---------------------------------------+----------+
| Spelare           | Tavling                               | Kategori |
+-------------------+---------------------------------------+----------+
| Stellan Bengtsson | EM i dubbel, EM i dubbel, EM i singel | herr     |
| Kjell Johansson   | EM i dubbel, EM i dubbel              | herr     |
| Michael Maze      | EM i singel                           | herr     |
| Marie Svensson    | EM i singel                           | dam      |
| Ping Pong         | NULL                                  | okand    |
+-------------------+---------------------------------------+----------+

Представление:

CREATE VIEW v_report AS
SELECT
    s.namn AS "Spelare",
    GROUP_CONCAT(t.namn) AS "Tavling",
    s.kategori AS "Kategori"
FROM
    spelare as s
    LEFT OUTER JOIN medalj AS m ON s.id = m.spelare_id
    LEFT OUTER JOIN tavling AS t ON m.tavling_id = t.id
GROUP BY
    s.namn
ORDER BY 
    tavling DESC;

Текущий результат:

MySQL [exam]> SELECT * FROM v_report;
+-------------------+-------------------------------------+----------+
| Spelare           | Tavling                             | Kategori |
+-------------------+-------------------------------------+----------+
| Stellan Bengtsson | EM i singel,EM i dubbel,EM i dubbel | herr     |
| Michael Maze      | EM i singel                         | herr     |
| Marie Svensson    | EM i singel                         | dam      |
| Kjell Johansson   | EM i dubbel,EM i dubbel             | herr     |
| Ping Pong         | NULL                                | okand    |
+-------------------+-------------------------------------+----------+
5 rows in set (0.001 sec)

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Здесь следует упорядочить по количеству, которое соответствует числу терминов CSV:

SELECT
    s.namn AS "Spelare",
    GROUP_CONCAT(t.namn) AS "Tavling",
    s.kategori AS "Kategori"
FROM spelare as s
LEFT OUTER JOIN medalj AS m ON s.id = m.spelare_id
LEFT OUTER JOIN tavling AS t ON m.tavling_id = t.id
GROUP BY
    s.namn,
    s.kategori
ORDER BY 
    COUNT(t.namn) DESC;

Обратите внимание, что ваш текущий запрос технически недействителен, поскольку он агрегируется только по столбцу namn, тогда как также выбрав столбец kategori. Вы должны использовать GROUP BY с обоими этими столбцами. В случае двух или более записей, которые имеют одинаковое количество терминов CSV, вы можете добавить еще один уровень в предложение ORDER BY, чтобы разбить t ie там.

1 голос
/ 25 марта 2020

Я думаю, что вы хотите:

ORDER BY COUNT(t.namn) DESC

Это подсчитывает элементы в каждой группе и порядки по ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...