我有一个包含名称及其交易的数据集,如何获得高于该平均值且低于该平均值的交易的平均值和计数。

Name    Transaction
John    12
John    34
John    45
John    66
John    32
chris   26
chris   54
chris   56
chris   99
chris   13
chris   4
kim     22
kim     34
kim     7
kim     11
kim     34

O/P 将是
Name      Avg     Count_greater_than_Avg    Count_Less_than_Avg
John      37.8          2                           3
chris     42            3                           3
kim       21.6          3                           2

提前致谢..

最佳答案

这基本上首先使用相关查询添加一列 Your_Avg,然后用另一个选择包装它以选择小于 avg 和大于 avg 的次数的出现次数。

SELECT tt.name,tt.Your_Avg,
       count(CASE WHEN tt.Your_Avg > tt.Transaction then 1 end) as Greater_Then_Avg,
       count(CASE WHEN tt.Your_Avg > tt.Transaction then 1 end) as Smaller_Then_Avg
FROM(
    SELECT t.name,
           (SELECT avg(s.transaction) FROM YourTable s WHERE s.name = t.name) as Your_Avg,
           t.transaction
    FROM YourTable) tt
GROUP BY tt.name

关于mysql - 如何按名称分组大于和小于平均值的计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36397479/

10-15 13:22