我希望找到表格中不同记录的总数。 我有一个包含以下列的表
id, name, product, rating, manufacturer price
这有大约128行,其中一些重复基于不同的列名。
我只想选择不同的行:
select distinct name, product, rating, maufacturer, price from table
返回47行
出于分页的目的,我需要找到不同记录的总数,所以我有另一个记录:
select distinct count(name), product, rating, maufacturer, price from table
但这会返回128而不是47.
如何获得不同行的总数?任何帮助都感激不尽。感谢
答案 0 :(得分:1)
你有明显的反对意见。
SELECT COUNT(DISTINCT column_name) FROM table_name
此外,我会在计算时删除额外的字段,对于其他字段,结果将是意外的。
答案 1 :(得分:1)
目前尚不清楚您是否希望使用结果获取SAME查询中的计数,或者是否要运行其他查询。这里有两种解决方案。在结果中作为新列:
select distinct name, product, rating, manufacturer, price, (
select count(*) from (
select distinct name, product, rating, manufacturer, price from table1
) as resultCount) as resultCount
from table1
请注意,之前的解决方案将重复每行的计数(*),这不是非常有效,甚至不具有视觉吸引力。尝试运行两个查询,一个获取实际数据,另一个查询获取表中与该数据匹配的记录数量:
select distinct name, product, rating, manufacturer, price from table1
select count(*) from (
select distinct name, product, rating, manufacturer, price from table1
) as result
希望这有帮助
答案 2 :(得分:0)
尝试添加GROUP BY name, product, rating, maufacturer, price
子句
答案 3 :(得分:0)
它需要运行您的实际查询TWICE ... INNER for distinct,然后获取那些作为单行返回的计数,然后将其加入原始选择distinct ...
select distinct
t1.product,
t1.rating,
t1.maufacturer,
t1.price,
JustTheCount.DistCnt
from
table t1,
( select count(*) as DistCnt
from ( select distinct
t2.product,
t2.rating,
t2.maufacturer,
t2.price
from
table t2 )
) JustTheCount
答案 4 :(得分:0)
在以下查询中,您将获得具有不同名称的行,因为DISTINCT
子句位于name
列之前:
SELECT DISTINCT name, product, rating, maufacturer, price FROM table
但是,要获取相同记录的计数,请使用以下格式:
SELECT COUNT(DISTINCT name) FROM table
请注意,DISTINCT
位于COUNT
函数内部,因此您需要计算不同的名称。您可能不希望在计数查询中包含其他列,因为它们将是集合中的随机样本。当然,如果你想要一个随机样本,那就包括它们。
大多数应用程序将首先运行计数查询,然后是查询以返回结果。另请注意,COUNT(*)
只是一个估算值,并且该值可能与实际返回的记录数不同。
SELECT DISTINCT COUNT(name), product FROM table
甚至不是MySQL 4.x中的有效查询。您不能混合聚合和非聚合列。在5.x中,它将运行,但非聚合列的值将是该集合中的随机样本。
答案 5 :(得分:0)
冒着引发火焰的风险......你可以随时使用:
SQL_CALC_FOUND_ROWS作为SQL的第一部分。这是非常具体的mysql。
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();