sql >> Databáze >  >> RDS >> Mysql

Nejlepších N na skupinový problém SQL v mysql

Možná to není moc hezké, ale myslím, že to bude fungovat:

SELECT cat_id, prod, pos FROM (
    SELECT cat_id, pos, prod, if(@last_id = cat_id, @cnt := @cnt + 1, (@cnt := 0 || @last_id := cat_id)) cnt
    FROM (
        SELECT p.cat_id, pseq.cnt pos, pseq.prod
        FROM (
            SELECT prod, count(*) cnt FROM prods GROUP BY prod ORDER BY cnt DESC
        ) pseq
        INNER JOIN prods p ON p.prod = pseq.prod
        ORDER BY cat_id, pseq.cnt DESC
    ) po
) plist
WHERE cnt <= 3;

Based on the above data, this will return:
+--------+-----------+-----+
| cat_id | prod      | pos |
+--------+-----------+-----+
|      1 | spl php   |   2 |
|      1 |  kntrn    |   1 |
|      1 | kntrn e   |   1 |
|      2 | spl php   |   2 |
|      2 |  zlv      |   1 |
|      2 | zlv enter |   1 |
+--------+-----------+-----+



  1. Spravovaná knihovna ODP.NET řeší alias, ale 32bitová knihovna ano

  2. Problémy UTF-8 se znaky z databáze MySQL (např. é jako é)

  3. Spokojenost vede k:Riziko se stává realitou

  4. Dotaz MySQL:Dotaz na všechny položky starší než 1 rok