如何在 MySQL 中获取记录数以及最小值/最大值?
Posted
技术标签:
【中文标题】如何在 MySQL 中获取记录数以及最小值/最大值?【英文标题】:How to get number of records along with min/max values in MySQL? 【发布时间】:2012-08-23 07:17:55 【问题描述】:我有一个搜索表单(运行 mysql 5.0.88
)来深入了解产品表。搜索是两步搜索。第一次运行得到number of results
,第二次运行得到data of records x-y
。
我默认显示所有记录的最低/最高价格,现在想要根据查询结果更新最低/最高价格。我在想最好的方法是在初始查询中,获取记录数。
目前看起来是这样的:
SELECT COUNT( a.id ) AS recordcount
, a.nos
, a.nos_anzeige
FROM artikelstammdaten a
WHERE
a.iln != "1111111111111" AND a.iln != "2222222222222" AND a.iln != "7777777777777"
AND a.aktiv = "ja"
AND a.artikelnummer LIKE '%name%'
AND (a.modus = "OPEN"
OR a.iln IN ( 55555555555,66666666666,2222222222222 )
)
GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung
HAVING (( sum(a.bestand) != 0 ) OR (a.nos = "ja" AND a.anzeige = "ja" ))
这给了我所有匹配的记录。
问题:
实际上,我只想要一条记录中的记录数(~ query.recordcount
)而不是一条一条的记录(我对 COUNT
的尝试不起作用)。像这样:
totalrecords min-price max-price
12345 9.99 1.204
我可以尝试在结果集中选择最小/最大值。
问题: 我如何修改我的查询,所以我只得到总记录(并且可以尝试添加最小/最大值)?
谢谢!
** 编辑:** 我的桌子是这样的:
CREATE TABLE dummy (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`iln` VARCHAR(13) NULL DEFAULT NULL,
`ean` VARCHAR(35) NULL DEFAULT NULL,
`artikelnummer` VARCHAR(35) NULL DEFAULT NULL,
`preis_ek` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_vk` DECIMAL(12,2) NULL DEFAULT NULL,
`firma` VARCHAR(35) NULL DEFAULT NULL,
`nos` VARCHAR(4) NULL DEFAULT NULL,
`nos_anzeige` VARCHAR(4) NULL DEFAULT NULL,
`aktiv` VARCHAR(4) NULL DEFAULT NULL,
`modus` VARCHAR(4) NULL DEFAULT NULL,
`bestand` DECIMAL(10,0) NULL DEFAULT '0'
)
价格将是 preis_ek
和 preis_vk
,我正在寻找每个价格的最小值/最大值。谢谢!
编辑: 像这样运行查询会给我一个这样的结果集:
"id" "nos" "nos_anzeige" "MIN(a.preis_ek)"
"1153837" "nein" "nein" "25,10"
"1153797" "nein" "nein" "12,40"
....
如果我没记错的话,它不会在结果集中选择每条记录的 min
【问题讨论】:
表的结构是什么,表中的价格列在哪里? @AnkurMittal 查看我的编辑 您可以在查询中使用 min 和 max 函数,例如。SELECT max(id) FROM table
但是像这样的查询分别给了我每个匹配的记录,而不是带有记录计数的单个记录。
@frequent:当然是,你用的是GROUP BY
。
【参考方案1】:
你可以使用
SELECT count(recordcount),
Max(max_price),
Min(min_price)
FROM (SELECT Count(a.id) AS recordcount,
a.nos,
a.nos_anzeige,
Max(preis_ek) AS max_price,
Min(preis_ek) AS min_price
FROM artikelstammdaten a
WHERE a.iln != "1111111111111"
AND a.iln != "2222222222222"
AND a.iln != "7777777777777"
AND a.aktiv = "ja"
AND a.artikelnummer LIKE '%name%'
AND ( a.modus = "open"
OR a.iln IN ( 55555555555, 66666666666, 2222222222222 ) )
GROUP BY a.iln,
a.artikelnummer,
a.preis_aktuell,
a.artikelbezeichnung
HAVING ( ( Sum(a.bestand) != 0 )
OR ( a.nos = "ja"
AND a.anzeige = "ja" ) )) temp
【讨论】:
正确的轨道。如何修复every derived table must have it's own table name
?
一件事:将开头更改为:Count(recordcount), max(max_price), min(min_price) from (SELECT a.id AS recordcount...
否则我正在计算匹配 id 的总和,因此大小为 s、m、l、xl 的样式 123 将是 4 个 id,应该是算作 1 而不是 4...希望这很清楚
但您不是已经在内部查询中使用Count(a.id) AS recordcount
,如果您想将每一行视为一条记录,那么您的建议是正确的,将进行更改:)以上是关于如何在 MySQL 中获取记录数以及最小值/最大值?的主要内容,如果未能解决你的问题,请参考以下文章