Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL - Grupuj według limitu

Myślę, że w MySQL nie ma prostego sposobu. Jednym ze sposobów, aby to zrobić, jest wygenerowanie numeru wiersza dla każdego wiersza podzielonego na grupy według nazwa_oceny, a następnie wybranie tylko wierszy z numerem wiersza 2 lub mniejszym. W większości baz danych możesz to zrobić za pomocą czegoś takiego:

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

Niestety MySQL nie obsługuje ROW_NUMBER składnia. Możesz jednak symulować ROW_NUMBER za pomocą zmiennych:

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

Wynik po uruchomieniu na danych testowych:

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. UNIKALNE Ograniczenie, tylko gdy pole zawiera określoną wartość

  2. Auto-inkrementacja nie resetuje się w MySQL

  3. Ignorowanie apostrofów w wyszukiwaniach mysql

  4. Przygotowana instrukcja PHP MySQLi multi_query

  5. Ostrzeżenie:mysqli_stmt::bind_param():Liczba zmiennych nie odpowiada liczbie parametrów w przygotowanej instrukcji