【问题标题】:How to show Min and Max value on dynamic pivot table如何在动态数据透视表上显示最小值和最大值
【发布时间】:2016-05-05 02:58:14
【问题描述】:

我从 dt_table 与 dt_k 连接创建了一个数据透视表

table dt_k
+------+--------+-----+
| id_k | name_k | ott |
+------+--------+-----+
|  1   | item 1 | ss  |
|  2   | item 2 | ss  |
|  3   | item 3 | ww  |
|  4   | item 4 | dd  |
|  5   | item 5 | asa |
|  6   | item 6 | rr  |
+------+--------+-----+

dt_table
+------+--------+------+----+
| id_t |  id_u  | id_k | k  |
+------+--------+------+----+
|  1   |   22   |  1   | 2  |
|  2   |   22   |  2   | 3  |
|  3   |   22   |  3   | 23 |
|  4   |   22   |  4   | 4  |
|  5   |   22   |  6   | 34 |
|  6   |   24   |  1   | 23 |
|  7   |   24   |  2   | 34 |
|  8   |   24   |  3   | 54 |
|  9   |   24   |  4   | 21 |
| 11   |   24   |  6   | 44 |
+------+--------+------+----+

我正在使用数据透视表将行转换为列这是我的代码:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
  'max(case when col = ''',
  col,
  ''' then value end) as `', 
  col, '`')
) INTO @sql
FROM
(
select concat('op_', `id_k`) col
from dt_table

) d;
SET @sql = CONCAT('SELECT  d.id_u as id,', @sql, ' 
              from
              (
                select id_k, id_u, concat(''op_'', `id_k`) col,  k value
                from dt_table

              ) d group by id_u ');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这段代码给出如下结果

+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
|  22  |   2  |  3   |  23  |  4   |  34' |
|  24  |  23  |  34  |  54  |  21  |  44  |
+------+------+------+------+------+------+

我需要这张表像这样在每一列上显示最小值和最大值

+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
|  22  |   2  |  3   |  23  |  4   |  34  |
|  24  |  23  |  34  |  54  |  21  |  44  |
+------+------+------+------+------+------+

+------+------+------+------+------+------+
| id_u | op_1 | op_2 | op_3 | op_4 | op_6 |
+------+------+------+------+------+------+
| min  |   2  |  3   |  23  |  4   |  34  |
| max  |  23  |  34  |  54  |  21  |  44  |
+------+------+------+------+------+------+

感谢您的帮助.. 最近工作的这个资源http://sqlfiddle.com/#!9/297674/1

【问题讨论】:

  • 你如何处理这个结果?
  • 感谢回复,我想用最大值或最小值计算每行的距离
  • 你只是想在命令行上显示这个?
  • 不,我希望决赛桌显示每一行的距离,
  • 第三次问...在哪里?在一本书里?一个电影?一本杂志?某处的网页?

标签: mysql pivot-table


【解决方案1】:

以下解决不了问题的哪一部分?

<?php

include('path/to/connection/statme.nts');

$query = "
SELECT id_u
     , id_k
     , k
  FROM dt_table
 ORDER 
    BY id_u
     , id_k;
";

$result = mysqli_query($conn,$query);

$array = array();

while($row = mysqli_fetch_assoc($result)){
  $array[] = $row;
}

$new_array = array();

foreach($array as $v){
  $new_array[$v['id_u']][] = $v['k'];
}

print_r($new_array);
?>

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2015-03-26
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多