按两列分组/排序 - 获取数据而不丢失行 - MySQL

时间:2012-10-19 05:37:29

标签: mysql sql group-by mysqli

我有一张表number_color_style,其结构如下所示。

Table Strcture

此表包含如下所示的数据(8行)

Table Data

我输出的内容是按number_color_idnumber_style_id

分组的所有记录

我在下面尝试了查询

SELECT *
FROM `number_color_style`
GROUP BY `number_color_id` , `number_style_id`

它给了我输出但是缺少一些行

Result

我想要的是四组数据而不会遗漏一行(应该包含所有8行)。 EG:

  • 第一集number_color_id = 1number_style_id = 1
  • 第二集number_color_id = 1number_style_id = 2
  • 第3集number_color_id = 2number_style_id = 1
  • 第4集number_color_id = 2number_style_id = 2

我该怎么办?

创建表格查询

CREATE TABLE IF NOT EXISTS `number_color_style` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `img` varchar(100) NOT NULL,
  `number_color_id` int(11) NOT NULL,
  `number_style_id` int(11) NOT NULL,
  `number_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

一些示例数据

INSERT INTO `jink`.`number_color_style` (`id`, `img`, `number_color_id`, `number_style_id`, `number_id`) VALUES (NULL, 'img1.png', '1', '1', '10'), (NULL, 'img2.png', '1', '1', '10'), (NULL, 'img3.png', '1', '2', '10'), (NULL, 'img4.png', '2', '1', '10'), (NULL, 'img5.png', '2', '1', '10');

由于

2 个答案:

答案 0 :(得分:3)

如果要根据number_color_id和number_style_id显示全部8个设置,则应使用order by而不是group by。

SELECT *
FROM `number_color_style`
ORDER BY `number_color_id` , `number_style_id`

答案 1 :(得分:1)

使用'group by'时需要一个聚合函数,例如count(*)。这可能是因为你将'分组'与'顺序'混淆。

一个可能的查询是:

select number_color_id, number_style_id, count (*)
from number_color_style
group by number_color_id, number_style_id

但我认为你想要

select *
from number_color_style
order by number_color_id, number_style_id