php - 获取具有该行最大值的列和行

标签 php mysql sql

table: |name|US|IN|SA|CHN|AU|EU|.......
       |john|0 |12|2 |0  |1 |0 |.......
       |andy|20|17|2 |10 |1 |0 |.......

我有一个包含 200 列的表,其中包含所有国家/地区。其中包含来自每个国家/地区的点击次数的整数条目。为了在地理图表中显示它们,我想按如下方式解析这些值:

输出:

IN,12
SA,2
AU,1

这样我就想排除那些拥有0次点击并按用户名john分组的国家/地区

这是我的方法,但它不完整..

 $query = "SELECT * FROM `countries`";


    $result = mysql_query("SHOW COLUMNS FROM `countries`.`graph_geo_table` WHERE Field NOT IN ('Name')");
    if (!$result) {
        echo 'Could not run query: ' . mysql_error();
        exit;
    }

if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {

    echo $row[Field];

    }
}

最佳答案

你可以这样做

SELECT column_name country,
       CASE column_name
       WHEN 'US'  THEN us
       WHEN 'IN'  THEN `in`
       WHEN 'SA'  THEN sa
       WHEN 'CHN' THEN chn
       WHEN 'AU'  THEN au
       WHEN 'EU'  THEN eu
       END clicks
  FROM Table1 t CROSS JOIN
(
  SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_NAME = 'Table1'
     AND TABLE_SCHEMA = SCHEMA()
     AND COLUMN_NAME <> 'name'
) c  
 WHERE name = 'john'
HAVING clicks > 0
 ORDER BY clicks DESC

输出:

| COUNTRY | CLICKS |
|---------|--------|
|      IN |     12 |
|      SA |      2 |
|      AU |      1 |

这里是SQLFiddle 演示

关于php - 获取具有该行最大值的列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18652865/

相关文章:

mysql - sql中返回查询值的子查询?

php - 在 Woocommerce 中添加自定义订单状态 "Shipped"

mysql - 将大数据插入 Cloud Spanner 表

mysql - 如何在 LEFT JOIN 中求和

mysql语句不会插入

mysql - 子查询和加入

mysql查询优化

php - 查找由 PHP 编码的关联数组的长度

java - PHP 未使用 AsyncTask 接收来自 POST 请求的数据

PHP 在 Javascript 中回显