Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL - Групиране по лимит

Не мисля, че има прост начин в MySQL. Един от начините да направите това е чрез генериране на номер на ред за всеки ред, разделен на групи по име на рейтинг, и след това да изберете само редовете с номер на ред 2 или по-малко. В повечето бази данни можете да направите това, като използвате нещо като:

SELECT * FROM (
    SELECT
        rating_name,
        etc...,
        ROW_NUMBER() OVER (PARTITION BY rating_name ORDER BY good) AS rn
    FROM your_table
) T1
WHERE rn <= 2

За съжаление MySQL не поддържа ROW_NUMBER синтаксис. Можете обаче да симулирате ROW_NUMBER използване на променливи:

SELECT
    rating_name, id_markets, good, neutral, bad
FROM (
    SELECT
        *,
        @rn := CASE WHEN @prev_rating_name = rating_name THEN @rn + 1 ELSE 1 END AS rn,
        @prev_rating_name := rating_name
    FROM (
        SELECT
            rating_name,
            id_markets,
            SUM(COALESCE(rating_good, 0)) AS good,
            SUM(COALESCE(rating_neutral, 0)) AS neutral,
            SUM(COALESCE(rating_bad, 0)) AS bad
        FROM zzratings
        WHERE rating_year = YEAR(CURDATE()) AND rating_week = WEEK(CURDATE(), 1)
        GROUP BY rating_name, id_markets
    ) AS T1, (SELECT @prev_rating_name := '', @rn := 0) AS vars
    ORDER BY rating_name, good DESC
) AS T2
WHERE rn <= 2
ORDER BY rating_name, good DESC

Резултат при изпълнение на вашите тестови данни:

france    1  2  0  0
france    2  1  0  0
ireland   1  4  2  0
ireland  21  3  1  0
poland    1  3  1  0
poland    2  1  0  0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да стартирате, рестартирате, проверявате състоянието и спирате MySQL сървъра

  2. MySQL:предпочитан тип колона за (продуктови) цени?

  3. Как да получите правилен дъмп с помощта на mysqldump и единична транзакция, когато DDL се използва едновременно?

  4. Заявка за премахване на уникален или първичен ключ от таблицата MYsql

  5. Как да получите скрипт за създаване на таблица в MySQL Workbench?