MySQL Как сделать подсчет по столбцу GROUP BY? - PullRequest
2 голосов
/ 10 июля 2019

У меня две таблицы пользователей, заказы

каждая таблица имеет столбец ниже

users(table)
id

orders(table)
user_id

Как узнать количество пользователей, чей счет составляет 1,2,3,4 .... n?

Как это?

users count    |   order count
999            |   1
100            |   2
 80            |   3
 70            |   4
 60            |   5
 50            |   6

То, что я пытался до сих пор, это

SELECT cnt.uid as u_cnt, cnt.ocnt as or_cnt
FROM (
  SELECT u.id as uid, COUNT(o.id) as o_cnt
  FROM users as u
  INNER JOIN orders o on u.id = o.user_id
) as cnt;
GROUP BY or_cnt

НО я получаю только 1 u_cnt и суммируем or_cnt

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Здесь необходимо два уровня пунктов group by: во-первых, вам нужно сгруппировать по пользователю и подсчитать количество заказов, которое имеет каждый пользователь. Затем вам нужно взять этот результат, сгруппировать по количеству заказов и посчитать, сколько пользователей имеют такое количество заказов.

Самый простой способ добиться этого, вероятно, с помощью подзапроса, где и внутренний, и внешний запрос имеют предложение group by:

SELECT cnt.ocnt as or_cnt, COUNT(*) as user_count
FROM (
  SELECT u.id as uid, COUNT(o.id) as o_cnt
  FROM users as u
  INNER JOIN orders o on u.id = o.user_id
  GROUP BY u.id -- This was missing in your original query
) as cnt
GROUP BY or_cnt
1 голос
/ 10 июля 2019

Вы можете использовать два уровня агрегации. Что еще более важно, вам не нужно JOIN. Вся необходимая информация находится в orders:

SELECT o_cnt, COUNT(*) as user_count
FROM (SELECT o.user_id, COUNT(*) as o_cnt
      FROM orders o
      GROUP BY o.user_id 
     ) u
GROUP BY o_cnt
ORDER BY o_cnt;
...