【问题标题】:Group By/Order By Two Columns - Get Data Without Losing Rows - MySQL按两列分组/排序 - 在不丢失行的情况下获取数据 - MySQL
【发布时间】:2012-10-19 13:49:52
【问题描述】:

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

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

我想要输出的是所有按number_color_idnumber_style_id分组的记录

我试过下面的查询

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

它给了我输出,但有些行丢失了

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

  • 第一组number_color_id = 1,number_style_id = 1
  • 第二组number_color_id = 1,number_style_id = 2
  • 第三组number_color_id = 2,number_style_id = 1
  • 第四组number_color_id = 2,number_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');

谢谢

【问题讨论】:

    标签: mysql sql group-by mysqli


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用“分组依据”时需要一个聚合函数,例如计数 (*)。可能是您将“分组依据”与“排序依据”混淆了。

      一个可能的查询是:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多