简体   繁体   English

如何计算联接表的每一行中值的出现次数?

[英]How do I count the occurences of the values in each row of a joined table?

I am creating a database for a hotel system using sql developer and oracle 11g and I need to print the first_name, last_name, email and how many times each person (email) visited the hotel. 我正在使用sql developer和oracle 11g为酒店系统创建数据库,我需要打印first_name,last_name,email和每个人(电子邮件)访问酒店的次数。 I therefore need to count how many times email occurs in the booking table. 因此,我需要计算预订表中出现电子邮件的次数。

I have 2 tables to join: 我有2张桌子要加入:

  • Customer: 顾客:

first_name last_name phone address town email postcode first_name last_name phone address town email postcode

  • Booking: 预订:

Date_ room occupants arrival_time nights paid email_ Date_ room occupants arrival_time nights paid email_

I wish to display first_name, last_name, email, COUNT(email) 我希望显示first_name, last_name, email, COUNT(email)

How can I do this? 我怎样才能做到这一点?

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_

It will be one to many relation: 这将是一对多的关系:

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
;

The same as: 与:

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
*/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM