查找不同行的Mysql查询显示不正确的结果

时间:2012-02-09 15:05:49

标签: mysql select

我希望找到表格中不同记录的总数。 我有一个包含以下列的表

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.

如何获得不同行的总数?任何帮助都感激不尽。感谢

6 个答案:

答案 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();