SQL中的行数计数和分组问题

SQL中的行数计数和分组问题,sql,Sql,我在尝试计数行数,然后在SQL中对它们进行分组时遇到问题 我已经使用下面的SELECT查询创建了一个表 SELECT ward.ward_no, bed_no FROM ward, bed WHERE ward.ward_no = bed.ward_no ward_no bed_no w1 1 w1 2 w1 3 w1 4 w2 5 w2 6 w2 7 w3 8

我在尝试计数行数,然后在SQL中对它们进行分组时遇到问题

我已经使用下面的SELECT查询创建了一个表

SELECT ward.ward_no, bed_no
FROM ward, bed
WHERE ward.ward_no = bed.ward_no

ward_no  bed_no

w1         1
w1         2
w1         3
w1         4
w2         5
w2         6
w2         7
w3         8
w3         9
w3         10
w4         11
我试图做的是创建一个表,其中显示每个病房编号ie w1和一个显示其中有多少字段的字段

eg. w1   3
    w2   3
    w3   3
我尝试过按字段进行计数和分组,例如

SELECT ward.ward_no, bed_no
FROM ward, bed
WHERE ward.ward_no = bed.ward_no
AND COUNT (bed_no) AS beds_in_ward
GROUP BY ward_no;

但是没有乐趣,任何建议都会得到充分的赞赏

我想你只是把SQL语法搞错了。试试这个

SELECT ward.ward_no, count(bed.Bed_No)
FROM ward INNER JOIN bed (on  ward.ward_no = bed.ward_no)
GROUP BY ward_no;

嗯。。也许你想知道每个病房的床位数? 也许你的例子并不完全正确——w1中应该有4个

如果是这样,请尝试以下方法:

SELECT ward.ward_no, count(bed_no)
FROM ward, bed
WHERE ward.ward_no = bed.ward_no
group by ward.ward_no

以上大部分答案都是正确的。另一种方法(在SQLServer中)是使用分区函数:

SELECT distinct ward.ward_no, 
  count(1) over (partition by ward_no) as c
FROM ward, bed
WHERE ward.ward_no = bed.ward_no
这似乎很愚蠢,除非您碰巧在一条语句中有多种类型的分组,或者您希望包含不在group by语句中的列:

SELECT distinct ward.ward_no, 
  ward.whatever_column_you_want, 
  bed.whatever_column_you_want, 
  count(1) over (partition by ward_no) as c
FROM ward, bed
WHERE ward.ward_no = bed.ward_no


为了便于将来参考,如果您在问题中包含实际错误消息或预期/实际输出,那么我们可以了解问题的性质。“没有快乐”并不能提供足够的信息。
SELECT distinct ward.ward_no, 
  ward.whatever_column_you_want, 
  bed.whatever_column_you_want, 
  count(1) over (partition by ward_no) as c
FROM ward, bed
WHERE ward.ward_no = bed.ward_no
SELECT distinct ward.ward_no, 
  some_other_columns,
  count(1) over (partition by ward_no) as bed_count,
  count(1) over (partition by some_other_columns) as other_count
FROM ward, bed
WHERE ward.ward_no = bed.ward_no