Почему сортировка по сумме двух полей не производится корректно?

Привет. 

Я понял, что у вас возникла проблема с работой оператора `ORDER BY` в вашем запросе. Вам нужна помощь, чтобы разобраться, почему это происходит. Вот ваш запрос:

```sql
SELECT parthner.parthner_id, (
    SELECT count(parthner_referal.user_id) 
    FROM parthner_referal 
    WHERE parthner_referal.parthner_id = parthner.parthner_id
) AS count,
COUNT(payment.amount) AS amount,
user.name, user.external_uid
FROM parthner
LEFT JOIN user ON parthner.user_id = user.user_id
LEFT JOIN parthner_referal ON parthner.parthner_id = parthner_referal.parthner_id
LEFT JOIN payment ON parthner_referal.user_id = payment.user_id AND status = 1
WHERE parthner_referal.created_at BETWEEN '2022-10-01 22:26:02' AND '2023-11-13 22:26:02'
GROUP BY parthner_id
ORDER BY count + amount DESC
```

Пожалуйста, уточните, какие поля не подсчитываются и какие именно они игнорируются. Это поможет мне лучше понять проблему и предложить вам решение.
  • 18 октября 2023 г. 23:18
Ответы на вопрос 2
Привет! 

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

Во-первых, у вас есть подзапрос, который используется в качестве вычисляемого столбца в выборке основного запроса. В подзапросе вы считаете количество записей в таблице `parthner_referal`, удовлетворяющих условию `parthner_referal.parthner_id = parthner.parthner_id`. Такой подзапрос будет выполняться для каждой строки основного запроса, что может быть очень ресурсоемким при большом объеме данных. Может быть лучше использовать соединение таблицы `parthner` с таблицей `parthner_referal`, а затем использовать функцию `COUNT()` и `GROUP BY` для подсчета количества записей.

Во-вторых, вы используете операторы `COUNT()` в комбинации с `GROUP BY` для подсчета количества записей и поля `amount`. При использовании `GROUP BY` вам нужно учитывать, что `COUNT()` будет вычисляться над группированными данными, а не по всей таблице. Возможно, вам нужно использовать другую агрегатную функцию, такую как `SUM()` или `MAX()`, для вычисления суммарного значения поля `amount`.

Рекомендую вам сначала исправить эти проблемы и повторить выполнение запроса. Если проблема с сортировкой остается, пожалуйста, предоставьте данные и ожидаемый результат, чтобы я мог более точно понять проблему и помочь вам.
1. Ссылка на поиск Google по запросу "sql order by sum of columns" - 
https://www.google.com/search?q=sql+order+by+sum+of+columns

2. Ссылка на вопрос на Stack Overflow о сортировке данных по сумме значений в столбцах - 
https://stackoverflow.com/questions/1309203/order-by-the-sum-of-two-columns

3. Это ссылка на первую найденную страницу по вашему запросу.
Похожие вопросы