mysql - 将复杂的 count() 查询结果插入表中

标签 mysql select mariadb

  • 注意:这个问题之前被过于简单化了;附加问题是为了更好地理解我的问题

我有一家公司的发货数据表,名为 t_shipment。 (部分) header 包括 acc_num、type_of_business、contract_exception、 payment_status 等。

我需要为其他部门的工作制作一个回顾表。因此,我使用 CREATE TABLE 创建一个新表 Ship_recap。

CREATE TABLE ship_recap
(vol_lumber(int), vol_oil(int);)

然后我需要将t_shipment中的相关数据重述到ship_recap中。我用过

 INSERT INTO ship_recap (vol_lumber)
 SELECT COUNT(acc_num) from t_shipment WHERE type_of_business = 'LMB' and (contract_exception = 'VALID' OR payment_status IS NOT NULL)
 INSERT INTO ship_recap (vol_oil)
 SELECT COUNT(acc_num) from t_shipment where type_of_business = 'OIL' and (contract_exception = 'VALID' OR payment_status IS NOT NULL);)

它运行了,但结果是:

 ____________________
|vol_lumber| vol_oil |
----------------------
|   150    |   NULL  |
|   NULL   |   230   |
----------------------

但我希望它们是:

 ____________________
|vol_lumber| vol_oil |
----------------------
|   150    |   230   |
----------------------

我尝试使用

INSERT INTO ship_recap (vol_lumber, vol_oil)
(SELECT COUNT(acc_num) from t_shipment WHERE type_of_business = 'LMB' and (contract_exception = 'VALID' OR payment_status IS NOT NULL),
SELECT COUNT(acc_num) from t_shipment where type_of_business = 'OIL' and (contract_exception = 'VALID' OR payment_status IS NOT NULL);)

以及相同逻辑的排列(例如将逗号改为分号,或去掉括号),但每次都返回语法错误。

结果/回顾表可能有多达 20 个以上的 header ,其他查询也可能会变得稍微复杂一些。 我需要一种方法来正确地将 SELECT/COUNT-ed 数据插入到回顾表中并将它们保留在一行中。

编辑:根据里诺的建议,我尝试了这个

 CREATE TABLE ship_recap (vol_OIL int,vol_LUM int,vol_BEV int,processed_OIL int,processed_LUM int,processed_BEV int);
 INSERT INTO ship_recap (vol_OIL, vol_LUM, vol_BEV, processed_OIL, processed_LUM, processed_BEV)
 SELECT
  COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)),
  COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)),
  COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)) FROM t_shipment;

一旦我更正了丢失的参数和括号,它就起作用了。

最佳答案

尝试下面的sql,可能对你有帮助;)

 CREATE TABLE ship_recap (vol_OIL int,vol_LUM int,vol_BEV int,processed_OIL int,processed_LUM int,processed_BEV int);
 INSERT INTO ship_recap (vol_OIL, vol_LUM, vol_BEV, processed_OIL, processed_LUM, processed_BEV)
 SELECT
  COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12', 1, NULL)),
  COUNT(IF(type_of_business = 'OIL' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)),
  COUNT(IF(type_of_business = 'LUM' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)),
  COUNT(IF(type_of_business = 'BEV' and process_date = '2016-05-12' and (contract_exception = ‘VALID’ OR payment_status IS NOT NULL), 1, NULL)) FROM t_shipment;

关于mysql - 将复杂的 count() 查询结果插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201418/

相关文章:

php - 如何使用事件记录从表中选择 *,其中 col1+col2=b

php - 如何在没有 CTE 的情况下从 sql 查询生成分层结果(谱系)?

sql - 为什么即使手动运行代码 MariaDB 也会引发语法错误?

mysql - Unicode解码错误: 'utf8' codec can't decode byte

sql - 如何通过 select 和 subselect 或 join 语句获取数据

php - 将多个php表单数组插入mysql行

javascript - 如何在本地存储中设置选择下拉列表的值并检索它以及将该值设置为默认值(除非更改)?

mysql - 我可以设置一个条件来过滤我的 COUNT 子句吗?数据库

mysql - 在 TINYTEXT 列上使用主键创建表会导致错误 : MySQL #1071 'Specified key was too long; max key length is 255 bytes'

php - 在 MySQL 中选择一些特殊字符时的奇怪行为