【发布时间】:2011-10-04 11:45:23
【问题描述】:
谁能帮助我了解 MySQL 的 Group By 的工作原理以及我做错了什么?我正在使用一个包含两个表、拍卖和批次的数据库。批次表有一个“auctionid”列,它将每个批次链接到相关的拍卖,拍卖和批次之间具有一对多的关系。
我从批次和拍卖中选择大量信息,包括使用几个 sum 和 count(distinct) 函数在每次拍卖的基础上汇总批次表中的一些记录。
我的查询是这样的:
SELECT
auction.`countryId`,
auction.`date`,
auction.`name`,
auction.`awardComments`,
lots.`lotName`,
lots.`region`,
lots.`popCovered`,
SUM(lots.'size'),
SUM(lots.`paired`),
SUM(lots.`unpaired`),
COUNT(DISTINCT 'lots.winner')
FROM auction join lots USING ('awardid')
GROUP BY lots.'awardid'
'awardid' 是拍卖表的主键和批次表的外键。 'lotid' 是批次表的主键,但未使用。
当我运行此查询时,我会为每个拍卖获得一行,我正在寻找的是每个批次的一行,该拍卖中每个批次的拍卖信息相同,并且 sum 和 count 函数计算总数拍品表中每次拍卖的大小和获胜者数量。如果我去掉查询的“分组依据”和“求和”部分,那么我得到的行数是正确的,每批一个。有没有办法通过 sum 和 count 函数获得我需要的所有行?基本上我只希望 group 子句适用于 SUM 和 COUNT 函数,如果这有意义的话 - 我希望计算每次拍卖的获胜者数量,但显示在该拍卖中每批的结果中。
【问题讨论】:
-
这个表的候选键是什么?
-
看起来您在表格列表中漏掉了一个逗号:
from auction, lots -
@eugeney,他实际上错过了
join关键字。 -
@JStead,我不知道候选键是什么 - 'awardid' 是拍卖表的主键,还将每个批次记录链接到其父拍卖。
-
@Johan,是的,我在编辑查询时不小心删除了“加入”关键字,然后重新添加,谢谢。