Подсчет большинства вхождений значения поля - PullRequest
1 голос
/ 10 марта 2010

Учитывая следующий запрос, как мне вернуть p_name с большинством транзакций? И так же, как я могу вернуть t_amount с большинством транзакций. Я хотел бы сделать все это в этом одном запросе, конечно.

SELECT t.*, p.* 
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id

, который может вернуть что-то вроде:

t_amount     t_platform      t_user     p_id      p_name

100.00       windows         122         20       simmons
200.00       windows         211         20       simmons
100.00       mac             200         18       smith
100.00       linux           190         20       simmons
100.00       mac             100         18       smith

Итак, учитывая этот набор результатов, я бы вернул best_partner = simmons и также best_amount = 100.00

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Я предполагаю, что «лучший партнер» = партнер с наибольшим количеством транзакций, а «лучшая сумма» = наиболее часто встречающаяся сумма транзакции.

Для подсчета транзакций вы можете использовать функцию Count () и группировать по. Примерно так:

SELECT p.name,count(t.id) as transactionCount
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id
GROUP BY p.name
ORDER BY 2 DESC 
LIMIT 1

Аналогично «лучшая сумма»:

SELECT t.amount, Count(t.id) as transactionAmountCount
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id
GROUP BY t.amount
ORDER BY 2 DESC 
LIMIT 1

Редактировать: объединено в два подзапроса:

SELECT
(SELECT p.name
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id
GROUP BY p.name
ORDER BY count(t.id) DESC 
LIMIT 1) as best_partner
,
(SELECT t.amount
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id
GROUP BY t.amount
ORDER BY Count(t.id) DESC 
LIMIT 1) as most_occuring_transaction_amount
0 голосов
/ 10 марта 2010
SELECT p.*, COUNT(p.id) AS p_count
FROM transactions t
LEFT JOIN partners p ON p.id=t.partner_id
GROUP BY p_count
ORDER BY p_count DESC
LIMIT 1
...