SQL Упорядочить по количеству - PullRequest
56 голосов
/ 03 марта 2012

Если у меня есть таблица и такие данные:

ID |  Name  |  Group   

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C

и я хочу заказать его в соответствии с общим значением группы от наименьшего до наибольшего значения, например: A - 2 записи, B - 1 запись, C - 3 записи, поэтому она станет:

3    Cat       B

1    Apple     A    

2    Boy       A

4    Dog       C

5    Elep      C

6    Fish      C

Я пытался

    $sql = "SELECT ID,Name FROM table ORDER BY COUNT(Group)";

но он просто возвращает один результат для меня.

Есть ли намеки? Спасибо.

Ответы [ 8 ]

117 голосов
/ 03 марта 2012

Сначала необходимо агрегировать данные, это можно сделать с помощью предложения GROUP BY:

SELECT Group, COUNT(*)
FROM table
GROUP BY Group
ORDER BY COUNT(*) DESC

Ключевое слово DESC позволяет вам сначала показывать наибольшее количество, ORDER BY - по умолчанию в порядке возрастания, в котором сначала отображается самое низкое значение.

3 голосов
/ 03 марта 2012

Попробуйте:

SELECT count(*),group FROM table GROUP BY group ORDER BY group

для упорядочения по убыванию отсчета do

SELECT count(*),group FROM table GROUP BY group ORDER BY count(*) DESC

Сгруппируйте результаты по столбцу group, возвращающему group и countи вернет заказ в group порядке

2 голосов
/ 03 марта 2012
SELECT Group, COUNT(*) FROM table GROUP BY Group ORDER BY Group

или на заказ по количеству

SELECT Group, COUNT(*) AS count FROM table GROUP BY Group ORDER BY count DESC
2 голосов
/ 03 марта 2012
SELECT * FROM table 
group by `Group`
ORDER BY COUNT(Group)
1 голос
/ 08 ноября 2018

... ни один из других ответов, похоже, не соответствует тому, что спросил спрашивающий.

Для таблицы с именем 'вещи' со столбцом 'группа':

SELECT
  things.*, counter.count
FROM
  things
LEFT JOIN (
  SELECT
    things.group, count(things.group) as count
  FROM
    things
  GROUP BY
    things.group
) counter ON counter.group = things.group
ORDER BY
  counter.count ASC;

, что дает:

id | name  | group | count 
---------------------------
3  | Cat   | B     | 1
1  | Apple | A     | 2
2  | Boy   | A     | 2
4  | Dog   | C     | 3
5  | Elep  | C     | 3
6  | Fish  | C     | 3
0 голосов
/ 02 февраля 2018

Q.Укажите название каждого шоу и количество раз, когда оно проводилось.Сначала перечислите шоу, которое чаще всего проводилось.

event_id show_id event_name judge_id
0101    01  Dressage        01
0102    01  Jumping         02
0103    01  Led in          01
0201    02  Led in          02
0301    03  Led in          01
0401    04  Dressage        04
0501    05  Dressage        01
0502    05  Flag and Pole   02

Ответы:

select event_name, count(show_id) as held_times from event 
group by event_name 
order by count(show_id) desc
0 голосов
/ 23 января 2017

Попробуйте использовать ниже Запрос:

SELECT
    GROUP,
    COUNT(*) AS Total_Count
FROM
    TABLE
GROUP BY
    GROUP
ORDER BY
    Total_Count DESC
0 голосов
/ 03 марта 2012

Ниже дается противоположность того, что у вас есть. (Столбец группы уведомлений)

SELECT
    *
FROM
    myTable
GROUP BY
    Group_value,
    ID
ORDER BY
    count(Group_value)

Дай мне знать, если с тобой все в порядке ...

Я тоже пытаюсь получить то, что вы хотите ...

...