簡體   English   中英

將值從一個表插入到另一個MySQL

[英]Inserting values from one table to another MySQL

我想將數據從我的一個表插入到另一個表。這是我擁有的已填充表:

 Act (
 id  INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 birth_date DATETIME,
 death_date DATETIME,
 place VARCHAR(20)  
 );

在此表中,某些值是NULL-例如,如果是生育行為,則death_date是NULL。

這是我要將數據傳輸到的表:

 Population_Growth (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 number_of_births INT,
 number_of_deaths INT,
 place VARCHAR(20),
 time DATE
 );

最后,我希望該表顯示同一地點和同一日期的死亡人數和出生人數。 至於出生和死亡的數量,我會做這樣的事情:

INSERT INTO Population_Growth (number_of_births, number_of_deaths) VALUES 
((COUNT (birth_date) FROM Act WHERE birth_date IS NOT NULL)), 
((COUNT (death_date) FROM Act WHERE death_date IS NOT NULL));

但是我不知道如何將其與相應的時間和日期聯系起來。

獲得指定結果的一種方法是像這樣的查詢:

SELECT c.place
     , c.time
     , SUM(c.count_births) AS number_of_births
     , SUM(c.count_deaths) AS number_of_deaths
  FROM (
         SELECT b.place
              , DATE(b.birth_date) AS `time`
              , SUM(1) AS count_births
              , SUM(0) AS count_deaths
           FROM Act b
          WHERE b.birth_date IS NOT NULL
          GROUP BY b.place, DATE(b.birth_date)
          UNION ALL
         SELECT d.place
              , DATE(d.death_date) AS `time`
              , SUM(0) AS count_births
              , SUM(1) AS count_deaths
           FROM Act d
          WHERE d.death_date IS NOT NULL
          GROUP BY d.place, DATE(d.death_date)
       ) c
  GROUP BY c.place, c.time

要將其轉換為插入,請在SELECT之前添加:

INSERT INTO Population_Growth (place, `time`, number_of_births, number_of_deaths)

跟進

上面的查詢將DATETIME列轉換為DATE數據類型(通過截斷時間部分)。

要按年和月獲取摘要,但仍是可用於分配給DATE列的有效表格,一種選擇是替換所有表達式:

DATE(b.birth_date)
DATE(d.death_date)

(在上面的查詢中)具有以下表達式:

DATE_FORMAT(b.birth_date,'%Y-%m-01')
DATE_FORMAT(d.death_date,'%Y-%m-01')

新的表達式將從DATETIME列中提取年份和月份,並將日期部分設置為該月的1號。

如果我理解正確,則希望從兩個日期列中獲取非NULL值的計數。 這是獲取摘要的一種方法:

select place, d,
       (select count(*) from act where act.birth_date = pd.d and act.place = pd.place) as births,
       (select count(*) from act where act.death_date = pd.d and act.place = pd.place) as deaths
from (select place, birth_date as d from act union
      select place, death_date from act
     ) pd;

然后,您可以通過執行以下操作將其放入population_growth

INSERT INTO Population_Growth(place, time, number_of_births, number_of_deaths) 
    select place, d,
           (select count(*) from act where act.birth_date = pd.d and act.place = pd.place) as births,
           (select count(*) from act where act.death_date = pd.d and act.place = pd.place) as deaths
    from (select place, birth_date as d from act union
          select place, death_date from act
         ) pd;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM