У меня есть следующий SQL запрос:
SELECT TOP 3 accounts.username
,COUNT(accounts.username) AS count
FROM relationships
JOIN accounts ON relationships.account = accounts.id
WHERE relationships.following = 4
AND relationships.account IN (
SELECT relationships.following
FROM relationships
WHERE relationships.account = 8
);
Я хочу вернуть общее количество счетов account.username и первых 3 account.username (в произвольном порядке). К сожалению, accounts.username
и COUNT(accounts.username)
не могут сосуществовать. Запрос работает нормально, удаляя один из них. Я не хочу отправлять запрос дважды с разными выбранными органами. Столбец count может охватывать 1000+, поэтому я бы предпочел рассчитать его в SQL, а не в коде.
Текущий запрос возвращает ошибку Column 'accounts.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
, которая никуда меня не привела, и это отличается от других вопросов, поскольку я не хочу использовать предложение 'group by'. Есть ли способ сделать это с FOR JSON AUTO
?
Желаемый результат может быть:
+-------+----------+
| count | username |
+-------+----------+
| 1551 | simon1 |
| 1551 | simon2 |
| 1551 | simon3 |
+-------+----------+
или
+----------------------------------------------------------------+
| JSON_F52E2B61-18A1-11d1-B105-00805F49916B |
+----------------------------------------------------------------+
| [{"count": 1551, "usernames": ["simon1", "simon2", "simon3"]}] |
+----------------------------------------------------------------+