Sql 如何计算联接表中每行中出现的值?

Sql 如何计算联接表中每行中出现的值?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在使用sql developer和oracle 11g为酒店系统创建一个数据库,我需要打印名字、姓氏、电子邮件以及每个人(电子邮件)访问酒店的次数。因此,我需要计算在预订表中出现电子邮件的次数 我有两个表要连接: 客户: 名字姓氏电话地址城镇电子邮件邮政编码 预订: 日期房间居住者到达时间夜间付费电子邮件 我希望显示名、姓、电子邮件、计数(电子邮件) 我如何才能做到这一点?这将是一对多关系: SELECT first_name, last_name, customer.email

我正在使用sql developer和oracle 11g为酒店系统创建一个数据库,我需要打印名字、姓氏、电子邮件以及每个人(电子邮件)访问酒店的次数。因此,我需要计算在预订表中出现电子邮件的次数

我有两个表要连接:

  • 客户:
名字
姓氏
电话
地址
城镇
电子邮件
邮政编码

  • 预订:
日期
房间
居住者
到达时间
夜间
付费
电子邮件

我希望显示名、姓、电子邮件、计数(电子邮件)


我如何才能做到这一点?

这将是一对多关系:

SELECT   first_name, last_name, customer.email, visits
FROM     customer
JOIN     (SELECT   email_, COUNT(*) AS visits
          FROM     bookings
          GROUP BY email_) v
ON       customer.email = v.email_
SELECT  c.first_name, c.last_name, c.email, COUNT(c.email)
FROM    customer  c
JOIN    booking  b
ON      c.email = b.email_
GROUP   BY
        c.first_name, c.last_name, c.email
;
同:

SELECT  x.col, count(x.col)
FROM
(
        SELECT 1 col FROM DUAL UNION ALL
        SELECT 2     FROM DUAL
) x
JOIN
(
        SELECT 1 col FROM DUAL UNION ALL
        SELECT 1     FROM DUAL UNION ALL
        SELECT 2     FROM DUAL UNION ALL
        SELECT 2     FROM DUAL UNION ALL
        SELECT 2     FROM DUAL UNION ALL
        SELECT 3     FROM DUAL
)  y
ON      x.col = y.col
GROUP   BY
        x.col
;
/*
1   2
2   3
*/

选择客户的名字、姓氏、计数(b.email)c加入预订b on c.email=b.email按名字、姓氏分组这些表如何相互关联?这是eamil的
列吗?您可能需要一个
CustomerId
,而在另一个表中需要一个外键。这些表与每个thr.电子邮件的关系如何?您尝试了什么?为什么访问次数在功能上取决于客户的电子邮件栏?这就像通过计算我的朋友在m地址簿中的次数来计算我与朋友交谈的次数。