Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在“分组依据”中选择“与分组依据求和”_Mysql_Mysqli - Fatal编程技术网

Mysql 在“分组依据”中选择“与分组依据求和”

Mysql 在“分组依据”中选择“与分组依据求和”,mysql,mysqli,Mysql,Mysqli,在本示例中,请参见表格: 如何输出此信息 我在尝试这个问题, 但它只是返回每个“名称”的“部分”行总数 SELECT NAMES , SUM(PART = "F001") AS SUM_F001 , SUM(PART = "F002") AS SUM_F002 , SUM(PART = "F003") AS SUM_F003 FROM MY_TABLE GROUP BY NAMES ASC 您与当前的查询非常接近 但您需要使用下面的查询来正确透视 SELECT

在本示例中,请参见表格:

如何输出此信息

我在尝试这个问题, 但它只是返回每个“名称”的“部分”行总数

SELECT
    NAMES
  , SUM(PART = "F001") AS SUM_F001
  , SUM(PART = "F002") AS SUM_F002
  , SUM(PART = "F003") AS SUM_F003
FROM
  MY_TABLE
GROUP BY NAMES ASC 

您与当前的查询非常接近
但您需要使用下面的查询来正确透视

SELECT 
    NAMES
  , MAX(CASE WHEN PART = 'F001' THEN QTY ELSE 0 END) AS F001
  , MAX(CASE WHEN PART = 'F002' THEN QTY ELSE 0 END) AS F002
  , MAX(CASE WHEN PART = 'F003' THEN QTY ELSE 0 END) AS F003
  , SUM(QTY) AS alias
FROM 
 FROM
  MY_TABLE
GROUP BY
  NAMES # Don't use ASC OR DESC on GROUP BY because it's deprecated
ORDER BY
 NAMES ASC 

您与当前的查询非常接近
但您需要使用下面的查询来正确透视

SELECT 
    NAMES
  , MAX(CASE WHEN PART = 'F001' THEN QTY ELSE 0 END) AS F001
  , MAX(CASE WHEN PART = 'F002' THEN QTY ELSE 0 END) AS F002
  , MAX(CASE WHEN PART = 'F003' THEN QTY ELSE 0 END) AS F003
  , SUM(QTY) AS alias
FROM 
 FROM
  MY_TABLE
GROUP BY
  NAMES # Don't use ASC OR DESC on GROUP BY because it's deprecated
ORDER BY
 NAMES ASC 

您可以按如下方式使用查询

SELECT NAMES , SUM(CASE WHEN PART = 'F001' THEN 1 ELSE 0 END) AS F001 , SUM(CASE WHEN PART = 'F002' THEN 1 ELSE 0 END) AS F002 , SUM(CASE WHEN PART = 'F003' THEN 1 ELSE 0 END) AS F003 , SUM(QTY) AS alias FROM FROM MY_TABLE GROUP BY NAMES ORDER BY NAMES ASC 

您可以按如下方式使用查询

SELECT NAMES , SUM(CASE WHEN PART = 'F001' THEN 1 ELSE 0 END) AS F001 , SUM(CASE WHEN PART = 'F002' THEN 1 ELSE 0 END) AS F002 , SUM(CASE WHEN PART = 'F003' THEN 1 ELSE 0 END) AS F003 , SUM(QTY) AS alias FROM FROM MY_TABLE GROUP BY NAMES ORDER BY NAMES ASC 

如果用户表中有多个条目具有相同的零件号,则使用SUM而不是MAX可能更安全。这似乎是OP在评论他的查询时所暗示的。你可能是对的@Nick iám习惯于用
MAX(…)
编写pivot查询。因为
MAX(..)
在SUM不支持的所有数据类型上都能正确工作。。除此之外,此查询的输出也将匹配此预期输出。@Raymond一切正常,非常感谢。感谢“ASC或DES”提示。如果用户表中有多个条目具有相同的零件号,则使用SUM而不是MAX可能更安全。这似乎是OP在评论他的查询时所暗示的。你可能是对的@Nick iám习惯于用
MAX(…)
编写pivot查询。因为
MAX(..)
在SUM不支持的所有数据类型上都能正确工作。。除此之外,此查询的输出也将匹配此预期输出。@Raymond一切正常,非常感谢。谢谢你的“ASC或DES”提示。参见