0

我有以下 SQL

select year(createdat), count(id) from memberevents where memberid=22 group by year(createdat)

它返回以下结果

year(created)  count(id)
============   =========
2013            3
2014            1

但我只想返回 sql 的记录数,所以在这种情况下它应该返回

totalrecords
============  
2           

但是我怎样才能只使用一个 sql 来做到这一点?谢谢

4

3 回答 3

2

您可以通过将查询引用为内联视图来从结果集中获取计数,

SELECT COUNT(1) FROM ( your_query_here ) alias

例如,在您的问题中使用查询,您可以这样做:

SELECT COUNT(1)
  FROM (
          select year(createdat)
               , count(id)
            from memberevents
           where memberid=22
           group by year(createdat)
       ) a

但是在这种情况下,如果没有内联视图,可以获得等效的结果:

SELECT COUNT(DISTINCT year(createdat))
  FROM memberevents
 WHERE memberid=22
于 2013-07-12T22:10:22.400 回答
1

只需计算与您的过滤条件匹配的不同年数。这里需要嵌套选择。

SELECT COUNT(DISTINCT year) FROM memberevents WHERE memberid = 22

或者,如果您的意图是运行任意查询,然后还能够获取与该查询关联的行数,您可以使用相同的连接进行后续调用,如下所示:

SELECT FOUND_ROWS();

请注意,如果您有一个语句,这将无法正常工作,LIMIT因为这将返回所有找到的行,而不是LIMIT应用后返回的行数。

于 2013-07-12T22:13:27.020 回答
0

尝试这个:

SELECT COUNT(*)
FROM
(
SELECT
    YEAR(createdat) ,
    COUNT(id)
FROM memberevents
WHERE memberid = 22
GROUP BY YEAR(createdat)
) a
于 2013-07-12T22:11:02.073 回答