帮助MySQL查询...需要帮助订购一组行

时间:2010-05-03 15:45:52

标签: mysql

我可以通过解释我的查询以及我需要的内容来说明问题。

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

其次,我需要能够显示组中最昂贵项目的图像,这就是我使用MAX(items.current_price)的原因。我认为MAX()获取对应于最大列值的ENTIRE行。我错了,因为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 10548
year 1989年
manufacturer弓箭手
total 451
price 8500.00(表中最贵项目的价格/不是项目10548的价格)
gallery_url http://ebay.xxxxx(项目10548的图片)

请帮助一下。感谢

1 个答案:

答案 0 :(得分:0)

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

第一个查询就像你拥有的一样(除了id没有帮助你)。 第二个查询使用GROUP BY字段和一个( one!)MAX字段来获取您需要的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

  

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