0

我是一名 SQL 初学者程序员,我想编写一个 SQL 代码,它应该以两种不同的方式计算一列中的条目数。就像首先只计算它们,然后只计算那些大于 5 的值。

我正在使用以下代码,但它给出了错误。

SELECT
    table1.col1,
    Count(table1.col1) AS Expr1,
    count (where(table1.col1)>5) as expr2
FROM table1
GROUP BY tabl1.col1

错误与 where 中使用的表达式有关:count (where(table1.col1)>5) as expr2.

是否有任何其他 sql 函数可用于在计数之前过滤掉大于 5 的值。

谢谢你。

4

4 回答 4

2

你想要条件聚合:

SELECT table1.col1,
       Count(table1.col1) AS Expr1,
       SUM(case when table1.col1 > 5 then 1 else 0 end) as expr2
FROM table1
GROUP BY table1.col1;

某些版本的 SQL 将布尔值视为整数值0,而1. 对于这些,您可以将表达式简化为:

SELECT t1.col1,
       Count(t1.col1) AS Expr1,
       SUM(t1.col1 > 5) as expr2
FROM table1 t1
GROUP BY t1.col1;

此版本还引入了表别名。这使查询更具可读性并修复了order by子句中的错字。

于 2013-09-01T16:12:45.190 回答
0
select
    col1,
    count(col1) as Expr1,
    sum(case when col1 > 5 then 1 else 0 end) as expr2
from table1
group by col1

或者

select
    col1,
    count(col1) as Expr1,
    count(case when col1 > 5 then col1 end) as expr2
from table1
group by col1

第一个只需为每个添加 1 col1 > 5。第二个计算表达式的所有非空值 case when col1 > 5 then col1 endcol1否则col1 > 5等于null

于 2013-09-01T16:13:00.333 回答
0

你可以试试这个: -

SELECT table1.col1,
       SUM(case when table1.col1 > 5 then 1 else 0 end) as expr2,
       Count(table1.col1) AS Expr1 
FROM table1
GROUP BY tabl1.col1
于 2013-09-01T16:13:32.107 回答
0

你很接近:

SELECT
  col1,
  count(*) AS Expr1,
  sum(case when col1)>5 then 1 end) as expr2
FROM table1
GROUP BY col1
于 2013-09-01T16:17:04.437 回答