我遇到了尝试计算多个行然后在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;
但没有任何喜悦,任何建议都将得到充分的赞赏
答案 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)
如果是这样的话,试试这个:
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