我有两张桌子:
-- **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表中选择所有手机,然后在手机表phone_type_id列中获取这些手机中有多少手机的总数。
我需要计算这些手机中有多少手机在电话表中有一个值(NOT NULL),在did_id或virtual_extension_id中。这就是我挂断电话的地方。
这是我到目前为止所拥有的。请注意,我目前使用相同的总计数并使用,因为我无法计算使用的计数。任何帮助是极大的赞赏。 提前谢谢。
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
已编辑:添加了创建和插入语句。
编辑:似乎正在取得进展。
选择phone_types.phone_type_manufacturer,phone_types.phone_type_model,COUNT(phones.phone_type_id)AS总计,COUNT(phones.did_id
OR virtual_extension_id)AS已使用
来自phones
INNER JOIN phone_types ON phones.phone_type_id = phone_types.phone_type_id
GROUP BY phones.phone_type_id
给出了以下输出: 制造商型号总计二手 Polycom Soundpoint IP 550 2 1 Polycom SoundPoint IP 450 1 0 Aastra 6757i CT 2 1
这是正确的,但是我需要显示其他手机在did_id和virtual_extension_id中都有NULL值吗?
答案 0 :(得分:0)
我想你是在这样的事情之后......虽然我真的不明白你的数据集如何与你的结果集相符?!?!
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;