简体   繁体   English

如何在 MYSQL 中使用 SELECT 语句插入数据?

[英]How to INSERT data with a SELECT statement in MYSQL?

I need to find the total amount of bookings by each passenger on a SINGLE day.我需要找出每位乘客在一天内的预订总量。 For example:例如:

+---------+-------------+-------+
| name    | departDate  | TOTAL |
+---------+-------------+-------+
| Douglas | 2019/05/26  |     2 |
| Mike    | 2020-02-12  |     1 |

All passengers will return 1 except for Douglas who has 2 flights on the same day.除道格拉斯当天有2个航班外,所有乘客都将返回1。 Then using that information, I have to create a new booking for the passenger with 2 flights on the same day (Douglas).然后使用该信息,我必须为同一天有 2 个航班的乘客(道格拉斯)创建一个新预订。

Right now I am receiving this output:现在我收到这个 output:

name       departDate            TOTAL
'Douglas' '2019-05-10 22:05:00', '1'
'Ben',    '2019-04-23 07:05:00', '1'
'Jean',   '2019-04-23 07:05:00', '1'
'Douglas' '2019-05-26 09:35:00', '1'
'Ben',    '2019-05-18 06:00:00', '1'
'Mike',   '2019-05-18 06:00:00', '1'
'Josef',  '2019-05-05 06:05:00', '1'
'Douglas' '2019-05-26 22:05:00', '1'
'Harry',  '2019-04-23 07:10:00', '1'
'Will',   '2019-05-10 08:45:00', '1'
'Ben',    '2019-05-10 08:45:00', '1'
'Mike',   '2019-05-10 08:45:00', '1'
'Alex',   '2019-04-24 07:10:00', '1'
'Duke',   '2019-04-24 07:10:00', '1'
'Alex',   '2019-04-26 13:10:00', '1'

When I am trying to reach this output:当我试图达到这个 output 时:

name       departDate   TOTAL
'Douglas' '2019-05-10', '1'
'Ben',    '2019-04-23', '1'
'Jean',   '2019-04-23', '1'
'Douglas' '2019-05-26', '2'
'Ben',    '2019-05-18', '1'
'Mike',   '2019-05-18', '1'
'Josef',  '2019-05-05', '1'
'Harry',  '2019-04-23', '1'
'Will',   '2019-05-10', '1'
'Ben',    '2019-05-10', '1'
'Mike',   '2019-05-10', '1'
'Alex',   '2019-04-24', '1'
'Duke',   '2019-04-24', '1'
'Alex',   '2019-04-26', '1'

I know that I cannot get 2 next to Douglas for the 2019/05/26 because the COUNT() is reading each booking on that day as separate bookings (NOT ON THE SAME DAY) because the times are different.我知道我无法在 2019/05/26 的 Douglas 旁边获得 2,因为 COUNT() 将当天的每个预订作为单独的预订(不是在同一天)读取,因为时间不同。

What I am trying to figure out is how to count the total bookings on each day, excluding the times of those days.我想弄清楚的是如何计算每天的总预订量,不包括那些日子的时间。

Here is the table:这是表格:

CREATE TABLE BOOKING (
name            VARCHAR(30),        /* Passenger's name*/
DOB             DATE,               /* Passenger's DOB */
flightNumber    CHAR(6),            /* Flight number */
departAirport   VARCHAR(50),        /* Departure airport */
departTime      DATETIME,           /* Departure date and time */
class           CHAR(10),           /* class of the seat */
bookingTime     DATETIME    NOT NULL,   /* Booking time */
CONSTRAINT BOOKING_PK PRIMARY KEY(name, DOB, flightNumber, departAirport, departTime, class, bookingTime),
CONSTRAINT BOOKING_FK1 FOREIGN KEY(name, DOB) REFERENCES PASSENGER(name, DOB),
CONSTRAINT BOOKING_FK2 FOREIGN KEY(flightNumber, departAirport, departTime, class) REFERENCES SEATING(flightNumber, departAirport, departTime, class));

Here are the insert statements:以下是插入语句:

INSERT INTO BOOKING VALUES ('Mike', STR_TO_DATE('10/08/1982', '%d/%m/%Y'), 'QF8764', 'SYD', STR_TO_DATE('10/05/2019 08:45', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('1/05/2019 10:35', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Mike', STR_TO_DATE('10/08/1982', '%d/%m/%Y'), 'QF322', 'AKL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('1/05/2019 10:35', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Jean', STR_TO_DATE('12/05/1988', '%d/%m/%Y'), 'JQ402', 'SYD', STR_TO_DATE('23/04/2019 07:05', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('1/04/2019 12:05', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Alex', STR_TO_DATE('21/07/1992', '%d/%m/%Y'), 'VA505', 'SYD', STR_TO_DATE('24/04/2019 07:10', '%d/%m/%Y %H:%i'), 'BUSINESS', STR_TO_DATE('10/04/2019 09:35', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Alex', STR_TO_DATE('21/07/1992', '%d/%m/%Y'), 'VA523', 'SYD', STR_TO_DATE('26/04/2019 13:10', '%d/%m/%Y %H:%i'), 'BUSINESS', STR_TO_DATE('10/04/2019 09:35', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Ben', STR_TO_DATE('22/04/1994', '%d/%m/%Y'), 'QF8764', 'SYD', STR_TO_DATE('10/05/2019 08:45', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('25/04/2019 11:35', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Ben', STR_TO_DATE('22/04/1994', '%d/%m/%Y'), 'QF322', 'AKL', STR_TO_DATE('18/05/2019 06:00', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('27/04/2019 16:15', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Ben', STR_TO_DATE('22/04/1994', '%d/%m/%Y'), 'JQ402', 'SYD', STR_TO_DATE('23/04/2019 07:05', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('17/04/2019 14:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Duke', STR_TO_DATE('28/03/1974', '%d/%m/%Y'), 'VA505', 'SYD', STR_TO_DATE('24/04/2019 07:10', '%d/%m/%Y %H:%i'), 'BUSINESS', STR_TO_DATE('20/04/2019 13:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Josef', STR_TO_DATE('27/11/1982', '%d/%m/%Y'), 'QF401', 'SYD', STR_TO_DATE('05/05/2019 06:05', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('22/04/2019 10:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Harry', STR_TO_DATE('16/07/1990', '%d/%m/%Y'), 'QF860', 'SYD', STR_TO_DATE('23/04/2019 07:10', '%d/%m/%Y %H:%i'), 'FIRST', STR_TO_DATE('21/04/2019 10:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Will', STR_TO_DATE('20/10/1977', '%d/%m/%Y'), 'QF8764', 'SYD', STR_TO_DATE('10/05/2019 08:45', '%d/%m/%Y %H:%i'), 'BUSINESS', STR_TO_DATE('25/04/2019 15:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Douglas', STR_TO_DATE('20/11/1967', '%d/%m/%Y'), 'QF497', 'SYD', STR_TO_DATE('26/05/2019 22:05', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('21/04/2019 12:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Douglas', STR_TO_DATE('20/11/1967', '%d/%m/%Y'), 'CA2842', 'PEK', STR_TO_DATE('10/05/2019 22:05', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('21/04/2019 12:30', '%d/%m/%Y %H:%i'));
INSERT INTO BOOKING VALUES ('Douglas', STR_TO_DATE('20/11/1967', '%d/%m/%Y'), 'QF129', 'SYD', STR_TO_DATE('26/05/2019 09:35', '%d/%m/%Y %H:%i'), 'ECONOMY', STR_TO_DATE('01/05/2019 10:30', '%d/%m/%Y %H:%i'));

You can use the date function:您可以使用date function:

select name, date(departtime) as date, count(*)
from booking
group by name, date;

(NOT ON THE SAME DAY) because the times are different. (不在同一天)因为时代不同。

Whats about add a SUBSTR trim to extract only the YYYY-MM-DD format.关于添加SUBSTR 修剪以仅提取YYYY-MM-DD格式的内容。

#SQLite #SQLite

select name, substr('departDate',1, 10) AS DATE, count(*)
from booking
group by name, date;

#SQLSERVER #SQLSERVER

select name, substring ('departDate',1, 10) AS DATE, count(*)
from booking
group by name, date;

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

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