我可以通过解释我的查询以及我需要的内容来说明问题。
我需要能够从数据库中获取一组项目,按类别,制造商和年份分组。需要根据组内项目的总数对分组进行排序。这部分是通过以下查询完成的。
其次,我需要能够显示组中最昂贵项目的图像,这就是我使用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的图片)
请帮助一下。感谢
答案 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部分中省略的列相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。