sql >> Databasteknik >  >> RDS >> Mysql

Beställ SQL-frågeposter efter frekvens

Förutsatt att du vill ha alla rader, men ordnade efter frekvensen av värden i någon kolumn `col` , kan du göra så här:

CREATE TABLE tbl (id SERIAL, col VARCHAR(16));
-- INSERT so that `id` does not match frequency of values under `col`
INSERT INTO tbl (col) VALUES ('value1'), ('value2'), ('value3'),
                             ('value1'), ('value2'), ('value3'),
                             ('value1'), ('value2'),
                             ('value1'),
                             ('value1');

    SELECT id, tbl.col
      FROM tbl
INNER JOIN (  SELECT col, COUNT(1) AS freq
                FROM tbl
            GROUP BY 1) derived
           USING (col)
  ORDER BY derived.freq DESC;

som kommer att producera

+----+--------+
| id | col    |
+----+--------+
|  4 | value1 |  <-- highest incidence
|  7 | value1 |
|  1 | value1 |
|  9 | value1 |
| 10 | value1 |
|  5 | value2 |
|  8 | value2 |
|  2 | value2 |
|  6 | value3 |  <-- lowest incidence
|  3 | value3 |
+----+--------+
10 rows in set (0.00 sec)



  1. MySQL:Få ett radnummer (ranking) för en specifik rad

  2. Vad är skillnaden mellan en hash-join och en merge-join (Oracle RDBMS )?

  3. Fulltextsökning med InnoDB i MySQL

  4. ADO.NET anropar T-SQL lagrad procedur orsakar ett SqlTimeoutException