繁体   English   中英

MySQL查询从表总数中选择并使用,计算剩余

[英]MySQL Query Select from table count total and used, calculate remaining

我有两个表:

-- **phones**

CREATE TABLE IF NOT EXISTS `phones` (
`phone_id` int(11) NOT NULL AUTO_INCREMENT,
`phone_type_id` int(11) NOT NULL,
`phone_mac` varchar(255) NOT NULL,
`office_id` int(11) DEFAULT NULL,
`did_id` int(11) DEFAULT NULL,
`virtual_extension_id` int(11) DEFAULT NULL,
PRIMARY KEY (`phone_id`),
UNIQUE KEY `phone_mac` (`phone_mac`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=67 ;

INSERT INTO `phones` (`phone_id`, `phone_type_id`, `phone_mac`, `office_id`, `did_id`, `virtual_extension_id`) VALUES
(1, 1, '0004f22ccccc', 5, NULL, NULL),
(63, 1, '0004f22bbbbb', 9, 33, NULL),
(64, 20, '0004f22aaaaa', 6, NULL, 6600),
(65, 2, '000033434333', 9, NULL, NULL),
(66, 20, '21232da32434', 6, NULL, NULL);

--  **phone_types**

CREATE TABLE IF NOT EXISTS `phone_types` (
  `phone_type_id` int(11) NOT NULL AUTO_INCREMENT,
  `phone_type_manufacturer` varchar(255) NOT NULL,
  `phone_type_model` varchar(255) NOT NULL,
  PRIMARY KEY (`phone_type_id`),
  UNIQUE KEY `phone_type_model` (`phone_type_model`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;

INSERT INTO `phone_types` (`phone_type_id`, `phone_type_manufacturer`, `phone_type_model`) VALUES
(1, 'Polycom', 'SoundPoint IP 550'),
(2, 'Polycom', 'SoundPoint IP 450'),
(3, 'Polycom', 'SoundPoint IP 335'),
(4, 'Polycom', 'SoundPoint IP 560'),
(5, 'Polycom', 'SoundPoint IP 670'),
(6, 'Polycom', 'SoundStation IP 5000'),
(7, 'Polycom', 'SoundStation IP 6000'),
(8, 'Yealink', 'W52P'),
(20, 'Aastra', '6757i CT');

我可以从phone_types表中选择所有电话,然后在Phones表中的phone_type_id列中获得这些电话的总数。

我需要计算出在phones表中did_id或virtual_extension_id中有多少电话具有值(NOT NULL)。 这是我挂断电话的地方。

到目前为止,这就是我所拥有的。 请注意,我目前使用的总计数和使用的计数相同,因为我无法确定已使用的计数。 任何帮助是极大的赞赏。 提前致谢。

SELECT 
phone_types.phone_type_id AS phone_type_id, 
phone_type_manufacturer AS phone_type_manufacturer, 
phone_type_model AS phone_type_model, 
COUNT( phones.phone_type_id ) AS total_count, 
COUNT( phones.phone_type_id ) AS used_count
FROM  phone_types 
LEFT JOIN phones ON phones.phone_type_id = phone_types.phone_type_id
GROUP BY phone_types.phone_type_id

样本输出:

    1 | Polycom | SoundPoint IP 550    | 2 | 2
    2 | Polycom | SoundPoint IP 450    | 0 | 0
    3 | Polycom | SoundPoint IP 335    | 0 | 0
    4 | Polycom | SoundPoint IP 560    | 0 | 0
    5 | Polycom | SoundPoint IP 670    | 0 | 0
    6 | Polycom | SoundStation IP 5000 | 0 | 0
    7 | Polycom | SoundStation IP 6000 | 0 | 0
    8 | Yealink | W52P                 | 0 | 0
   20 | Aastra  | 6757i CT             | 1 | 1

编辑:添加了创建和插入语句。

编辑:似乎正在取得进展。

SELECT phone_types.phone_type_manufacturer,phone_types.phone_type_model,COUNT(phones.phone_type_id)AS总计,COUNT(phones.did_id或virtual_extension_id)AS从phones INNER JOIN phone_types on phones.phone_type_id = phone_types.phone_type_id GROUP BY手机。

这将提供以下输出:制造商模型总计二手Polycom Soundpoint IP 550 2 1 Polycom SoundPoint IP 450 1 0 Aastra 6757i CT 2 1

这是正确的,但我还需要显示在did_id和virtual_extension_id中都具有NULL值的其他电话?

我猜您正在追寻这样的事情……尽管我不太了解您的数据集与结果集如何吻合?

SELECT t.phone_type_id
     , t.phone_type_manufacturer
     , t.phone_type_model
     , COUNT(COALESCE(did_id,virtual_extension_id)) x
  FROM phone_types t 
  LEFT 
  JOIN phones p 
    ON p.phone_type_id = t.phone_type_id
 GROUP 
    BY t.phone_type_id;

暂无
暂无

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

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