我有三个表会话
- 驱动程序ID
- 付款人ID
- 日期注册
- 会话ID
- 付款人电子邮件
驱动程序
- 驱动程序ID
- 付款人ID(一个付款人可以有多个驱动程序(
- 程序
- 语言
付款人
- 收款人ID
- 电子邮件(我想从这里收到电子邮件,因为它可以更改,如果是,数据会在这里更改,但不会在会话中相互更改(
我想和驱动程序ID付款人ID电子邮件程序语言从注册日期到今天的天数会话数(会话ID数(
到目前为止,我所拥有的是:
SELECT days_between(D.DateRegistration, today()) as No.of.Days, COUNT (S.SessionID) as No.of.Sessions, D.DriverID, D.PayerID, D.Language, D.Program, S.PayerEmail (-- P.Email, commented)
FROM Driver as D, Sessions as S ( -- Payer as P, commented)
WHERE D.DriverID = S.DriverID
GROUP BY (S.DriverID)
我有两个问题:
- 我的计数不起作用,我想是因为GROUP BY,但我不知道如何继续
- 有没有可能像这样或以类似的简单方式匹配第三张表
我是SQL的新手,这是迄今为止我能做的最好的一次。
尽量避免隐式联接,因为可能会意外获得交叉联接,从而返回不正确的结果,尤其是在查询中有大量联接的情况下。
GROUP BY语句通常与聚合函数(COUNT((、MAX((、MIN((、SUM((和AVG(((一起使用,以将结果集分组为一列或多列,因此您应该在GROUP BY子句中的SELECT子句中提到这些列
SELECT
D.DriverID,
D.PayerID,
D.Language,
D.Program,
P.PayerEmail,
days_between(D.DateRegistration, today()) as No.of.Days,
COUNT (S.SessionID) as No.of.Sessions,
FROM Driver as D
LEFT JOIN Sessions AS S ON D.DriverID = S.DriverID
LEFT JOIN Payer AS P ON P.PayerID = S.PayerID
GROUP BY
D.DriverID,
D.PayerID,
D.Language,
D.Program,
S.PayerEmail,
days_between(D.DateRegistration, today())