MySQL行标题基于查询中字段分组的顺序

时间:2013-02-13 23:00:44

标签: mysql sql group-by sql-order-by

我想基于ORDER BY字段在MySQL查询中输出行分组标题。不知道如何解释这一点,所以最好只展示我想要完成的一个例子。

SELECT * FROM products_table
ORDER BY Category, Description


Prod_num Category Description Price
type_1
00001    type_1   Prod 1      $1
00002    type_1   Prod 2      $2
00003    type_1   Prod 3      $3
00004    type_1   Prod 4      $4
00005    type_1   Prod 5      $5
type_2
00006    type_2   Prod 6      $6
00007    type_2   Prod 7      $7
00008    type_2   Prod 8      $8
00009    type_2   Prod 9      $9
type_3
00010    type_3   Prod 10     $10
00011    type_3   Prod 11     $11

我希望在显示具有该类别的所有产品之前,将类别字段显示为行标题。我想我已经看到这个发布在某个地方,但经过大量的搜索后仍无法弄清楚如何去做主要是因为我认为我没有使用正确的术语。

1 个答案:

答案 0 :(得分:2)

我坚信,这应该在您的代码的演示方面完成,但是,这是我过去使用GROUP BYWITH ROLLUP看到它的方式:

SELECT  Category, 
        IFNULL(prod_num,'') Prod_Num, 
        IFNULL(description,'') Description, 
        IFNULL(price,'') Price
FROM    
  (
    SELECT *
    FROM   Products_Table
    GROUP BY Category,Prod_num,Description,Price
    WITH ROLLUP
  ) AS X
WHERE Category IS NOT NULL
  AND (
    (Prod_num IS NOT NULL AND Description IS NOT NULL AND Price IS NOT NULL)
     OR 
    (Prod_num IS NULL AND Description IS NULL AND Price IS NULL)
  )
ORDER BY Category,Prod_num,Description,Price

这并不是你所要求的100%,因为它将“类别”列放在第一位 - 我还没有玩过它,看看是否可以改变它。

结果如下:

CATEGORY  PROD_NUM  DESCRIPTION  PRICE
type_1          
type_1    00001     Prod 1       $1
type_1    00002     Prod 2       $2
type_2          
type_2    00003     Prod 3       $3
type_2    00004     Prod 4       $4
type_2    00005     Prod 5       $5
type_3          
type_3    00006     Prod 6       $6

示例Fiddle

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html