【问题标题】:Counting most occurrences of a field's value计算字段值的大多数出现次数
【发布时间】:2010-03-10 14:31:33
【问题描述】:

鉴于以下查询,我如何返回交易最多的 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

谢谢!

【问题讨论】:

  • 最好的意思是 most_frequent。所以,best_amount 是 100(出现频率最高的)

标签: mysql count field sum


【解决方案1】:

我假设“最佳合作伙伴”= 交易次数最多的合作伙伴,“最佳金额”= 最频繁发生的交易金额。

要计算交易,您可以使用 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

【讨论】:

  • 无法合并这两个查询?
  • SELECT t.amount,p.name, Count(t.id) as transactionAmountCount FROM transactions t LEFT JOIN partners p ON p.id=t.partner_id GROUP BY t.amount,p.name ORDER由 3 DESC 限制 1
  • @remi,ORDER BY 3 有什么作用?更直接一点,3 指的是什么?
  • @k00k(我自己),3指的是第3列。
  • @k00k:我认为你不能在一个查询中做到这一点,但你可以通过运行两个子查询来避免到数据库的往返。我会把它添加到我的答案中。
猜你喜欢
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2019-07-28
  • 2017-06-13
  • 2022-01-06
  • 2010-11-23
相关资源
最近更新 更多