postgresql SELECT 1值和count(值),但LIMIT为1

时间:2018-01-27 19:28:38

标签: sql postgresql

到目前为止,我将此作为我的SQL查询:

SELECT value, count(value) over () as TOTAL from listofvalues GROUP BY value 

结果如下:

value|TOTAL 

IS18-0001| 6
IS18-0002| 6
IS18-0003| 6
IS18-0004| 6
IS18-0005| 6
IS18-0006| 6

我希望结果看起来更像是:

value|TOTAL 

IS18-0001| 6
IS18-0002|
IS18-0003|
IS18-0004|
IS18-0005|
IS18-0006|

基本上我想将总数限制为1,但似乎无法找到解决方案,任何想法?这甚至可能吗?

3 个答案:

答案 0 :(得分:2)

您可以检查row_number并将其他行设置为null(或'')

SELECT value, 
case row_number() over () when 1 then count(value) over () else null end as TOTAL 
from listofvalues GROUP BY value 

答案 1 :(得分:0)

请尝试以下查询。我刚给你的查询添加了一个行号。

Select Value,case when RN=1 then Total else '' END Total 
From(
select value,Cast(Total as varchar) Total,ROW_NUMBER() over (order by value) RN
from(
SELECT value, 
       count(value) over () as TOTAL
 from #listofvalues GROUP BY value 
 )A)B 

答案 2 :(得分:0)

您似乎不需要group by,所以我会从以下开始:

SELECT value,
       (CASE WHEN row_number() over (order by value) = 1 
             THEN count(*) over ()
        END) as TOTAL
FROM listofvalues ;

仅当您有多个具有相同值的行时才需要GROUP BY。如果你有重复项,你的查询正在做一些非常具体的事情 - 计算不同值的数量,同时列出每个值一次。它不计算原始数据中的行数。