在mysql中按一列分组

时间:2014-06-28 10:41:13

标签: php mysql

我不知道如何准确描述问题标题,但你可以想象流动: 我有一张桌子,我想选择不同的数据

    A    B    C
   Cat   10   False
   Dog   25   True
   Dog   20   False
   Cat   5    False

当我对A列使用group by时,结果将是:

    A    B    C
   Cat   5    False
   Dog   20   False

是否有可能在MySQL中生成这样的结果:

    A    B    C
   Cat   10   False
         5    False
   Dog   25   True
         20   False

或任何建议该表返回一个如下数组:

Array(
       [Cat]=>Array(
                     [0]=> Array(
                                   [0]=>10
                                   [1]=>False
                                ) 
                     [1]=> Array(
                                   [0]=>5
                                   [1]=>False
                                )
                   )
       [Dog]=>Array(
                     [0]=> Array(
                                   [0]=>25
                                   [1]=>True
                                ) 
                     [1]=> Array(
                                   [0]=>20
                                   [1]=>False
                                )
                   )
     )

1 个答案:

答案 0 :(得分:2)

如果下一行列值与上一行列值匹配,则必须记住上一行值,以便在下一行中不再显示它。

示例

select 
    case when @prev != ( @curr := A ) then ( @prev := @curr ) else '' end as A
  , B, C
from( 
    select * from tbl_soq24465988 
    order by 1 asc, 2 desc
) sorted_table
, ( select @prev := '', @curr := '' ) initializer
;

输出

+------+------+-------+
| A    | B    | C     |
+------+------+-------+
| Cat  |   10 | False |
|      |    5 | False |
| Dog  |   25 | True  |
|      |   20 | False |
+------+------+-------+

演示@ MySQL 5.5.32 Fiddle