我尝试对b.bookingIDba.bookingID使用内部连接语句,但是它不起作用,并说别名'b'不存在。

select c.customerid, customerfname,customerlname, count(b.bookingid) as
'No. of Bookings', flightdate, arrivaltime, departtime,
b.price, status, taxespaid, ba.bagpayment, p.PaymentAmount,
pt.paymentcode
from booking b, flight f, baggage ba, payment p, paymenttype pt, customer
c
where b.bookingID=ba.bookingid
and pt.paymentcode=p.paymentcode
and f.flightnum=b.flightnum
and c.customerid=b.customerID
;


预期结果将显示与每个特定预订相关的所有信息。因此,它不会返回显示count(b.bookingID)为3,000的第一行,而是显示数据库中的76个预订,以及每个预订的数量。

最佳答案

如果您想知道所有不同的bookingid的数目,则需要计数(不同的bookingid)

select c.customerid, customerfname,customerlname
    , count(distinct  b.bookingid) as
'No. of Bookings', flightdate, arrivaltime
, departtime,
b.price, status, taxespaid, ba.bagpayment
, p.PaymentAmount,
pt.paymentcode
from booking b, flight f, baggage ba, payment p, paymenttype pt, customer c
where b.bookingID=ba.bookingid
and pt.paymentcode=p.paymentcode
and f.flightnum=b.flightnum
and c.customerid=b.customerID
;


count()根据您的条件返回不为空的行数

因此count(*)返回所有不为空的行,

count(bookingid)返回所有非空行,其bookingid列不为空

最后一个count(distinct bookingid)重新运行您的情况的bookingid的唯一值的数字,那么请确保bookingid是唯一的,即预订号

无论如何,对于没有参与聚集功能工作的列(默认情况下),使用聚集函数没有适当的组仅适用于mysql版本

关于mysql - 当我对主键使用count函数时,它仅返回1行,这是什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55903435/

10-11 06:24