mysql查询组由/ order by count

时间:2014-11-03 14:40:21

标签: mysql group-by

这是一张表:

ID    Item  status  updatetime   author
1     a     1       2014-01-02   Mike
2     a     1       2014-02-01   Jack
3     b     2       2014-01-10   John
4     b     1       2014-10-10   Ben
5     b     2       2014-01-11   Sam
6     c     3       2014-01-02   Aron
7     c     1       2014-11-01   Aron
8     c     1       2014-10-20   Max
9     d     3       2014-10-20   Mike

我想计算每个项目的每个状态的总数,以及项目的最新日期/作者

结果应该是这样的:

当item = a和status = 1

时,

count(status)= 2 当项目= a且状态= 2

时,

count(status)= 0 当item = a和status = 3

时,

count(status)= 0

Item    status_1    status_2    status_3    Latestupdate    author
a        2            0           0         2014-02-01       Jack
b        1            2           0         2014-10-10       Ben
c        2            0           1         2014-11-01       Aron
d        0            0           1         2014-10-20       Mike

如何编写sql?

1 个答案:

答案 0 :(得分:0)

您想要与其他一些信息一起进行调整。我会建议这种方法:

select item,
       sum(status = 1) as status_1,
       sum(status = 2) as status_2,
       sum(status = 3) as status_3,
       max(updatetime) as LatestUpdate,
       substring_index(group_concat(author order by updatetime desc), ',', 1) as author
from table t
group by item;

棘手的部分是最后一列,author。这使用技巧来获取作者的最后更新。诀窍是将所有作者连接在一起,按更新时间排序。然后选择列表的第一个元素。