代码之家  ›  专栏  ›  技术社区  ›  BDuelz

关于MySQL查询的帮助…需要有关排序一组行的帮助

  •  1
  • BDuelz  · 技术社区  · 16 年前

    我可以通过解释我的疑问以及我需要什么来最好地说明这一点。

    我需要能够从数据库中获得一组项目,按类别、制造商和年份分组。需要根据组中的项目总数对分组进行排序。这部分是通过下面的查询完成的。

    其次,我需要能够显示出组外最贵商品的图像,这就是我使用max(items.current_price)的原因。我认为max()会得到与最大列值相对应的整行。我错了,因为max只得到最大价格的数值。所以这个查询并不能很好地解决这个问题。

    SELECT
        items.id,
        items.year, 
        items.manufacturer,
        COUNT(items.id) AS total,
        MAX(items.current_price) AS price,
        items.gallery_url,
    FROM 
        ebay AS items
    WHERE
        items.primary_category_id = 213
    AND
        items.year <> ''
    AND
        items.manufacturer <> ''
    AND
        items.bad_item <> 1
    GROUP BY  
        items.primary_category_id,
        items.manufacturer,
        items.year
    ORDER BY  
        total DESC,
        price ASC
    LIMIT 
        10
    

    如果这不能很好地解释,结果应该是这样的。

    id 一万零五百四十八
    year 一千九百八十九
    manufacturer 鲍曼
    total 四百五十一
    price 8500.00(表中最昂贵项目的价格/不是10548项的价格)
    gallery_url http://ebay.xxxxx (10548项图片)

    请帮忙。谢谢

    1 回复  |  直到 16 年前
        1
  •  0
  •   bukzor    16 年前

    我也遇到过同样的问题,我相当肯定你必须做两个查询(或者一个子查询,这是一个品味问题)。

    第一个查询与您的查询类似(除了ID对您没有帮助)。 第二个查询使用分组依据字段和一个( 一个! )获取ID和所需的任何其他元数据的最大字段。

    相信 这就是实现,尽管很难测试:

    SELECT
        items.id,
        items.year, 
        items.manufacturer,
        items.gallery_url
    FROM
        ebay as items
    NATURAL JOIN
        (
            SELECT
                COUNT(items.id) AS total,
                MAX(items.current_price) AS current_price,
                items.primary_category_id,
                items.manufacturer,
                items.year
            FROM 
                ebay AS items
            WHERE
                items.primary_category_id = 213
            AND
                items.year <> ''
            AND
                items.manufacturer <> ''
            AND
                items.bad_item <> 1
            GROUP BY  
                items.primary_category_id,
                items.manufacturer,
                items.year
            ORDER BY  
                total DESC,
                price ASC
            LIMIT 
                10
        ) as bigones
    ORDER BY  
        bigones.total DESC,
        bigones.current_price ASC
    

    此文档可能有助于您了解发生了什么:

    http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-columns.html

    …每组中的所有行对于按部分分组的列应该具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。