CREATE TABLE `table3` (
`id` int(11) NOT NULL auto_increment,
`type` varchar(2) default NULL,
`date` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;INSERT INTO `table3` (`id`, `type`, `date`) VALUES
(1, 'A', '2007-05-28 12:17:59'),
(2, 'A', '2007-05-28 13:17:59'),
(3, 'B', '2007-05-28 13:23:59'),
(4, 'B', '2007-05-28 14:25:59'),
(5, 'C', '2007-05-28 15:25:20'),
(6, 'C', '2007-05-29 22:25:20'),
(7, 'B', '2007-05-29 23:26:20'),
(8, 'A', '2007-05-29 09:16:46'),
(9, 'B', '2007-05-30 09:16:46');CREATE TABLE `table4` (
`id` int(11) NOT NULL auto_increment,
`tbid` int(11) NOT NULL default '0',
`name` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;INSERT INTO `table4` (`id`, `tbid`, `name`) VALUES
(1, 1, 'fg'),
(2, 2, 'fh'),
(3, 3, 'hj'),
(4, 3, 'jk'),
(5, 5, 'lk'),
(6, 5, 'io'),
(7, 5, 'op'),
(8, 8, 'oo'),
(9, 8, 'pp');说明:table3 中的id关联到table4 中的tbid
要求:按照 table3 每天日期,然后分组统计,按A分为一组, B,C分为一组分别进行统计,并且要存在于table4中
搜索结果如下:
date A B,C
2007-05-28 2 2
2007-05-29 1 1
2009-05-30 0 0
`id` int(11) NOT NULL auto_increment,
`type` varchar(2) default NULL,
`date` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;INSERT INTO `table3` (`id`, `type`, `date`) VALUES
(1, 'A', '2007-05-28 12:17:59'),
(2, 'A', '2007-05-28 13:17:59'),
(3, 'B', '2007-05-28 13:23:59'),
(4, 'B', '2007-05-28 14:25:59'),
(5, 'C', '2007-05-28 15:25:20'),
(6, 'C', '2007-05-29 22:25:20'),
(7, 'B', '2007-05-29 23:26:20'),
(8, 'A', '2007-05-29 09:16:46'),
(9, 'B', '2007-05-30 09:16:46');CREATE TABLE `table4` (
`id` int(11) NOT NULL auto_increment,
`tbid` int(11) NOT NULL default '0',
`name` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;INSERT INTO `table4` (`id`, `tbid`, `name`) VALUES
(1, 1, 'fg'),
(2, 2, 'fh'),
(3, 3, 'hj'),
(4, 3, 'jk'),
(5, 5, 'lk'),
(6, 5, 'io'),
(7, 5, 'op'),
(8, 8, 'oo'),
(9, 8, 'pp');说明:table3 中的id关联到table4 中的tbid
要求:按照 table3 每天日期,然后分组统计,按A分为一组, B,C分为一组分别进行统计,并且要存在于table4中
搜索结果如下:
date A B,C
2007-05-28 2 2
2007-05-29 1 1
2009-05-30 0 0
=================================================================================================
在结果中
2009-05-30那条date对应的是table3 id为9的记录,但是此id值,并未出现在table4的tbid字段中,如何解释你的要求?
2009-05-30那条date对应的是table3 id为9的记录,但是此id值,并未出现在table4的tbid字段中,如何解释你的要求?
没有出现在table4中的tbid字段中, 就计算为0 看搜索结果
2009-05-30 0 0
table4对应的table3 id有1,2,3,5,8
3对应的记录是B,日期为2007-05-28
5对应的记录是C,日期也是2007-05-28
其余1,2,8均为A的记录,那么何来的date A B,C
2007-05-29 1 1这条记录呢?
2007-05-28 2 2
2007-05-29 1 1 //这里的B,C组应该是0吧,因为table3中的B,C id(6,7)z在table4的tbid中并不存在啊
2007-05-30 0 0
SELECT tb1.acount AS A, ifnull( tb2.acount, 0 ) AS 'B,C', tb1.date
FROM (SELECT count( DISTINCT (
table3.id
) ) AS acount,
TYPE , DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , `table4`
WHERE `type` = 'A'
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb1
LEFT JOIN (SELECT count( DISTINCT (
table3.id
) ) AS acount,
TYPE , DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , table4
WHERE `type`
IN (
'B', 'C'
)
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb2 ON tb1.date = tb2.date
date A B,C
2007-05-28 2 2
2007-05-29 1 0
2007-05-30 0 0
mysql> select b.jdate,IFNULL(a.A,0) as A,ifnull(a.BC,0) as `B'C` from (select le
ft(date,10) as idate,sum(if(type='A',1,0)) as A,sum(if(type='B' or type='C',1,0)
) as BC from table3 where id in (select distinct tbid from table4) group by left
(date,10)) a right join (select distinct left(date,10) as jdate from table3) b o
n a.idate=b.jdate;
+------------+---+-----+
| jdate | A | B'C |
+------------+---+-----+
| 2007-05-28 | 2 | 2 |
| 2007-05-29 | 1 | 0 |
| 2007-05-30 | 0 | 0 |
+------------+---+-----+
3 rows in set (0.00 sec)
FROM (SELECT DISTINCT (
DATE_FORMAT( DATE, '%Y-%m-%d' )
) AS date
FROM table3
)tbd
LEFT JOIN (SELECT count( DISTINCT (
table3.id
) ) AS acount, DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , `table4`
WHERE `type` = 'A'
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb1 ON tbd.date = tb1.date
LEFT JOIN (SELECT count( DISTINCT (
table3.id
) ) AS acount,
TYPE , DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , table4
WHERE `type`
IN (
'B', 'C'
)
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb2 ON tbd.date = tb2.date
FROM (SELECT DISTINCT (
DATE_FORMAT( DATE, '%Y-%m-%d' )
) AS date
FROM table3
)tbd
LEFT JOIN (SELECT count( DISTINCT (
table3.id
) ) AS acount, DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , `table4`
WHERE `type` = 'A'
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb1 ON tbd.date = tb1.date
LEFT JOIN (SELECT count( DISTINCT (
table3.id
) ) AS acount,
TYPE , DATE_FORMAT( `date` , '%Y-%m-%d' ) AS date
FROM `table3` , table4
WHERE `type`
IN (
'B', 'C'
)
AND table3.id = table4.tbid
GROUP BY DATE_FORMAT( `date` , '%Y-%m-%d' )
)tb2 ON tbd.date = tb2.date
+------------+---+-----+
| jdate | A | BC |
+------------+---+-----+
| 2007-05-28 | 2 | 2 |
| 2007-05-29 | 1 | 0 |
| 2007-05-30 | 0 | 0 |
+------------+---+-----+
3 rows in set (0.00 sec)
FROM table3 t3 where t3.id in(
select distinct(tbid) from table4
)
GROUP BY substring( t3.`date` , 1, 10 )
没有记录的将不出现在列表中,lz可以改一下
我这里可以啊。。是不是你漏了什么
select b.jdate,IFNULL(a.A,0) as A,ifnull(a.BC,0) as BC from (select left(date,10) as idate,sum(if(type='A',1,0)) as A,sum(if(type='B' or type='C',1,0)) as BC from table3 where id in (select distinct tbid from table4) group by left(date,10)) a right join (select distinct left(date,10) as jdate from table3) b on a.idate=b.jdate;
是phpmyadmin自身有问题,我刚下了phpMyAdmin-3.1.5-english.zip测试没有问题哦~