在SQL中计算多个行并对它们进行分组的问题

时间:2012-02-22 15:35:12

标签: 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
w3         9
w3         10
w4         11

我要做的是创建一个表格,其中显示每个病房没有,即w1和显示其中有多少个字段的字段。

eg. w1   3
    w2   3
    w3   3

我已经尝试过COUNT& GROUP BY字段如此...

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;

但没有任何喜悦,任何建议都将得到充分的赞赏

4 个答案:

答案 0 :(得分:2)

SELECT ward.ward_no, COUNT(*) AS beds_in_ward
    FROM ward
        INNER JOIN bed
            ON ward.ward_no = bed.ward_no
    GROUP BY ward.ward_no

答案 1 :(得分:0)

我认为你的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;

答案 2 :(得分:0)

嗯..也许你想要每个病房的病床数量? 也许你的例子并不完全正确 - 在w1中应该有4个。

如果是这样的话,试试这个:

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

答案 3 :(得分:0)

上面的大部分答案都是正确的。另一种方式(在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

这似乎很愚蠢,除非您碰巧在一个语句中有多种类型的分组,或者您希望包含不在您的分组语句中的列:

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

OR

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