Mysql中的 GROUP BY WITH ROLLUP用法

本文介绍 MySQL 中 WITHROLLUP 子句的使用方法,通过示例展示了如何在 GROUP BY 分组的基础上添加汇总行,同时提供了 coalesce 函数的用法以美化汇总行的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.WITH ROLLUP:在group分组字段的基础上再进行统计数据。

例子:首先在name字段上进行分组,然后在分组的基础上进行某些字段统计,表结构如下:

CREATE TABLE `test` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(25) DEFAULT NULL COMMENT '标题',
  `uid` int(11) DEFAULT NULL COMMENT 'uid',
  `money` decimal(2,0) DEFAULT '0',
  `name` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;

存几条数据看看:

INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('2', '国庆节', '2', '12', '周伯通');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('3', '这次是8天假哦', '3', '33', '老顽童');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('4', '这是Uid=1的第一条数据哦', '1', '70', '欧阳锋');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('5', '灵白山少主', '4', '99', '欧阳克');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('7', '九阴真经创始人', '3', '12', '小顽童');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('8', '双手互博', '2', '56', '周伯通');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('9', '销魂掌', '2', '19', '周伯通');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('10', '蛤蟆功', '1', '57', '欧阳锋');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('11', '绝杀掌', '3', '800', '小顽童');
INSERT INTO `test`.`test` (`Id`, `title`, `uid`, `money`, `name`) VALUES ('12', '九阴真经', '3', '84', '老顽童');

分组统计:

SELECT name, SUM(money) as money FROM  test GROUP BY name WITH ROLLUP;

可以看到按照name分组后对money求和统计了。上面看到 null 1242, 如何搞个别名字段比如 总金额:1242呢?也可以滴,咱们继续:

coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
SELECT
	sum(sale_amount - payment_amount) AS creditAmount, SUM(goods_amount),
	coalesce(buyer_name, '总金额') as buyerName
FROM
	dk_sale_order_head
WHERE
	stall_id = 10065
and buyer_name in ('tcc','QTL')
GROUP BY
	buyer_name WITH ROLLUP;

查询结果

Unity ArgumentException: Getting control 1's position in a group with only 1 controls when doing repaint 是一个常见的错误,通常在Unity的编辑器脚本中发生。这个错误的原因是在进行重绘(repaint)操作时,尝试获取一个控件的位置,而这个控件所在的组只有一个控件。 具体来说,这个错误通常发生在以下几种情况下: 1. **控件数量不匹配**:在自定义的编辑器脚本中,控件的数量和预期的不一致,导致在重绘时找不到对应的控件。 2. **GUI布局问题**:在GUI布局中,控件的排列和布局不正确,导致在重绘时找不到控件。 3. **条件渲染问题**:某些条件渲染的控件在某些情况下没有渲染,导致在重绘时找不到控件。 解决这个问题的方法有几种: 1. **检查控件数量**:确保在代码中定义的控件数量和实际渲染的控件数量一致。 2. **调整GUI布局**:检查并调整GUI布局,确保控件的排列和布局正确。 3. **条件渲染**:确保条件渲染的控件在所有情况下都能正确渲染。 以下是一个简单的示例,展示了如何避免这个错误: ```csharp using UnityEngine; using UnityEditor; public class MyEditorWindow : EditorWindow { private bool showButton = true; [MenuItem("Window/My Editor Window")] public static void ShowWindow() { GetWindow<MyEditorWindow>("My Editor Window"); } private void OnGUI() { if (showButton) { if (GUILayout.Button("Click Me")) { showButton = false; } } else { GUILayout.Label("Button Clicked!"); } } } ``` 在这个示例中,控件的数量会根据`showButton`的值变化。通过这种方式,可以避免在重绘时出现控件数量不匹配的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值