Mysql 列转行统计查询 、行转列统计查询

2019-03-02 01:00|来源: 网路

-- ----------------------------
-- Table structure for `TabName`
-- ----------------------------
DROP TABLE IF EXISTS `TabName`;
CREATE TABLE `TabName` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  `Date` date DEFAULT NULL,
  `Scount` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of TabName
-- ----------------------------
INSERT INTO `TabName` VALUES ('1', '小说', '2013-09-01', '10000');
INSERT INTO `TabName` VALUES ('2', '微信', '2013-09-01', '20000');
INSERT INTO `TabName` VALUES ('3', '小说', '2013-09-02', '30000');
INSERT INTO `TabName` VALUES ('4', '微信', '2013-09-02', '35000');
INSERT INTO `TabName` VALUES ('5', '小说', '2013-09-03', '31000');
INSERT INTO `TabName` VALUES ('6', '微信', '2013-09-03', '36000');
INSERT INTO `TabName` VALUES ('7', '小说', '2013-09-04', '35000');
INSERT INTO `TabName` VALUES ('8', '微信', '2013-09-04', '38000');


-- ------------------------
-- 查看数据
-- ------------------------
SELECT  * from TabName ;
-- ------------------------
-- 列转行统计数据
-- ------------------------
SELECT Date ,
MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信 
FROM TabName  
GROUP BY Date  

 

  

-- ------------------------
-- 行转列统计数据
-- ------------------------

select Date, group_concat(NAME,'总量:',Scount) as b_str from TabName group by Date



select Date,NAME, group_concat(NAME,'总量:',Scount) as b_str from   TabName 
 group by Date ,NAME

  


转自:http://www.cnblogs.com/lhj588/p/3315876

相关问答

更多
  • db.user.find().count(); ==> 这个快是因为 _id作为主键是一个相对小的索引 而对应的mysql里是走的全表扫描 如果你设计的表结构很满足范式,那么其实并不是MongoDB所擅长的场景,你不会觉得mongodb有多快 dbdao.com it在线教育
  • 我仅提供思路给你,至于其它单位,可以单独摘录出来,union all select 始发地 目的地 起步价,sum(case when 区间 > 0 and 区间 <= 20 then 单位价格 else '' end) '0-20(公斤)' , sum(case when 区间 > 20 and 区间 <= 50 then 单位价格 else '' end) '20-50(公斤)' , sum(case when 区间 > 50 and 区间 <= 100 then 单位价格 else '' end) ' ...
  • mysql 列转行[2022-06-16]

    select typeId,value1 from 表 union select typeId,value2 from 表 union select typeId,value3 from 表 union select typeId,value4 from 表 ........ union select typeId,value10 from 表 注意,以上共19行(10行select、9行union)是一个语句,中间没有分号,这个语句的结果就是你想要的结果。
  • 可以通过count函数来实现。 sqlOne:select * from tablename1 where id>5;此语句查询出来多条记录,之后看做一个新的表。 sqlTwo:select conut(*) from (select * from tablename1 where id>5) as tablename2;此语句即可查询出来统计的记录条数。 备注:以上方法通用于所有的数据统计,如果是单表查询,可以直接通过:“select count( *) from tablename1 where id> ...
  • mysql热备份,一个服务器只读取数据,一个服务器值更新数据,这样会环境点的!
  • mysql 列转行[2024-02-06]

    我想出来了。sql不能解决的,后台进行数据拆分重组。不过分页麻烦。不过数据完成这样的组合要求了。
  • 以下查询将按州提供计数,但将计算整个表的百分比。 SELECT fname, count(fname) as nameCount, count(fname) / (SELECT count(fname) FROM user_detail)*100 as percent FROM user_detail GROUP BY fname, state order by percent desc; 按州的百分比试试这个 SELECT fname, count(fname) as nameCount, ...
  • 你可以通过两条语句合并一起 如: select name,age,score from sd_student_t where score > 90 union all select '合计',null, count(1) from sd_student_t where score > 90
  • 如果要显示唯一IP的数量,可以使用MySQL的GROUP BY : SELECT COUNT(DISTINCT(ip)), DATE(date) FROM statistics GROUP BY date ORDER BY date DESC 如果您想要每个日期的所有唯一IP列表,则需要在检索完所有IP后对其进行分组,例如 $sql = "SELECT DISTINCT(ip) AS ip, DATE(date) FROM statistics ORDER BY date D ...