重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
select c,count(b) from table_name group by c
创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、做网站、网站制作、网站优化、软件开发、网站改版等服务,在成都10多年的网站建设设计经验,为成都成百上千中小型企业策划设计了网站。
c,及每个C对应的元素数量
分组排序的地方,你是想做成什么样子?
select * from table_name order by c,a asc
这个样子吗?
至于查询性能,你做一个索引就OK了
你后面加一个group by就行了
select count(*) 人数,健康情况 from PERSON group by 健康情况
mysql 分类汇总
select code,sum(num) total from 表名 group by code order by c
这里假定 你这个表为 table 你要查询的class=fen
select id from table a where class=fen and not exists(select 1 from table where id=a.id and timea.time) limit 1
一般可用Group 子句+ SQL聚合函数获取分类汇总信息
例如下列分组汇总SQL语句,返回本月每个产品类别的销售总金额:
select 产品类别,sum(单价*数量) as 销售金额 from 销售记录
where Date_Format(销售日期,'%Y%m')=Date_Format(now(),'%Y%m')
group by 产品类别;
我这里给你一个 类似的例子, 表结构也就是简单的 分类, 明细.
要查询每个分类下面, 随机明细 几条的情况.
你可以参考参考.
测试表与测试数据。
CREATE TABLE test_order_by_rand (group_code varchar(10), name varchar(10));
INSERT INTO test_order_by_rand VALUES('水果', '苹果');
INSERT INTO test_order_by_rand VALUES('水果', '梨子');
INSERT INTO test_order_by_rand VALUES('水果', '香蕉');
INSERT INTO test_order_by_rand VALUES('水果', '桃子');
INSERT INTO test_order_by_rand VALUES('水果', '菠萝');
INSERT INTO test_order_by_rand VALUES('蔬菜', '萝卜');
INSERT INTO test_order_by_rand VALUES('蔬菜', '白菜');
INSERT INTO test_order_by_rand VALUES('蔬菜', '蘑菇');
INSERT INTO test_order_by_rand VALUES('蔬菜', '毛豆');
INSERT INTO test_order_by_rand VALUES('蔬菜', '青椒');
INSERT INTO test_order_by_rand VALUES('坚果', '核桃');
INSERT INTO test_order_by_rand VALUES('坚果', '榛子');
INSERT INTO test_order_by_rand VALUES('坚果', '杏仁');
INSERT INTO test_order_by_rand VALUES('坚果', '花生');
INSERT INTO test_order_by_rand VALUES('坚果', '开心果');
预期目标, 按照 group_code 进行分组, 每个分组内, 进行随机获取数据.
SELECT
group_code,
name
FROM
(
SELECT
CASE
WHEN @cn != group_code THEN @rownum:= 1
ELSE @rownum:= @rownum + 1
END AS No,
group_code,
@cn := group_code AS group_code,
name
FROM
(SELECT @rownum:=0) r,
(SELECT @cn:= '') p,
(SELECT * FROM test_order_by_rand order by group_code, rand()) tmp
) subQuery
WHERE
No = 3
ORDER BY
group_code;
这里套了2层子查询, 其中的
(SELECT * FROM test_order_by_rand order by group_code, rand()) tmp
用于实现, 针对每一个 group_code 进行分组, 下属的 name 的数据, 进行随机排序
其中的
(......) subQuery
用于实现, 针对 前面的 按 group_code 分组, name 随机排序后的数据。
模拟一个 row_number() over(partition by group_code) 的处理
最后的 No = 3 用于限制, 每一个 group_code 下面, 显示多少行.
执行结果:
+------------+--------+
| group_code | name |
+------------+--------+
| 水果 | 苹果 |
| 水果 | 香蕉 |
| 水果 | 梨子 |
| 蔬菜 | 青椒 |
| 蔬菜 | 白菜 |
| 蔬菜 | 蘑菇 |
| 坚果 | 核桃 |
| 坚果 | 花生 |
| 坚果 | 开心果 |
+------------+--------+
9 rows in set (0.00 sec)