我有一个需要对数据进行分组的表。例如,我需要为一个用户输入多少行的计数。所以我可以按
进行简单的计数/分组SELECT user_id, count(*) as total FROM `ad` group by user_id
但是从添加的行中我总共需要另一个字段“价格”。广告的价格不是一成不变的,所以我不能只做$ 75 X的行数,我需要一个函数来添加每个price字段,并为给定用户的所有行总计。
我尝试了一些联合声明,例如:
SELECT user_id, count(*) as total FROM `ad` group by user_id union All select sum(price) from ad
显然上面的方法行不通,只是显示我的想法
这是表格,也许这将有助于您理解。因此,至关重要的是,我需要特定用户放置多少广告的总数,但我也需要汇总每个广告的价格,因为我需要此信息来显示收入目的
CREATE TABLE `ad` (
`ad_id` int(11) NOT NULL AUTO_INCREMENT,
`ad_type_id` int(11) NOT NULL,
`price` double DEFAULT NULL,
`startdate` date DEFAULT NULL,
`enddate` date DEFAULT NULL,
`path_location` varchar(100) DEFAULT NULL,
`user_id` int(11) NOT NULL,
`isActive` int(11) DEFAULT NULL,
PRIMARY KEY (`ad_id`),
KEY `fk_ad_type_ad` (`ad_type_id`),
KEY `fk_user_id_ad` (`user_id`),
CONSTRAINT `fk_ad_type_ad` FOREIGN KEY (`ad_type_id`) REFERENCES `ad_type` (`ad_type_id`),
CONSTRAINT `fk_user_id_ad` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
预期结果如下:
用户34发布了22个广告,产生了560美元的收入。我需要三个数据点,但分组依据只允许两个?
答案 0 :(得分:1)
您不能简单地向查询中添加sum()
吗?
SELECT user_id,
count(*) total,
sum(price) price
FROM ad
GROUP BY user_id;