【问题标题】:MySQL: group by column in specific order (not just ASC or DESC)MySQL:按特定顺序按列分组(不仅仅是 ASC 或 DESC)
【发布时间】:2018-05-02 17:01:03
【问题描述】:

我有一个正在运行的查询...但是我希望能够以特定方式进行排序/排序。 我当前的查询(例如)返回如下日期:

CenterID, OrgName, ID, Relationship, REL_START_YEAR, REL_END_YEAR, Full_Name

(84864, 'Twin Cities Spine Center', '19100', 'Fellow', '1971', '1971', 'Robert B. Winter, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Founder', '1971', '1972', 'Robert C. Summer, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Faculty', '1971', '1974', 'Robert D. Spring, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Fellow', '1972', '1974', 'Robert A. Fall, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Faculty', '1975', '1976', 'Ginger B. Jones, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Founder', '1977', '1978', 'Mary F. Johnson, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Faculty', '1971', '1972', 'Shawn S. Dimmer, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Fellow', '1978', '1978', 'Scotty B. Raw, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Fellow', '1978', '1981', 'Lou V. Louis, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Founder', '1984', '1984', 'Paula L. Davis, MD'),
(84864, 'Twin Cities Spine Center', '19100', 'Fellow', '1981', '1982', 'Nadine H. Ericson, MD');

但是我想对事物进行排序/排序/分组

首先是关系列..但不只是在 alpha 排序中..我希望它被列为

创始人至上 师资二 老三……

然后上面的每个“组”按 REL_START_YEAR 排序

这让我很接近......但不是对关系列顺序的精细控制:

SELECT o.CenterID
     , o.OrgName
     , r.ID
     , r.Relationship
     , r.REL_START_YEAR
     , r.REL_END_YEAR
     , u.ID
     , u.Full_Name 
  FROM genealogy_orgs o
  JOIN genealogy_relations r
    ON r.CenterID = o.CenterID 
  JOIN genealogy_users u
    ON u.ID = r.ID 
 WHERE o.CenterID = 84864
 ORDER 
    BY r.Relationship DESC
     , r.REL_START_YEAR ASC;

为了能够按“关系”列中的唯一顺序进行排序/分组,我在寻找什么? IN() 函数的某种用途?

【问题讨论】:

标签: mysql sorting unique


【解决方案1】:
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(relationship VARCHAR(12) NOT NULL
,year INT NOT NULL
,PRIMARY KEY (relationship,year)
);

INSERT INTO my_table VALUES
('Fellow' ,1971),
('Founder',1971),
('Faculty',1971),
('Fellow' ,1972),
('Faculty',1975),
('Founder',1977),
('Faculty',1974),
('Fellow' ,1978),
('Founder',1984),
('Fellow' ,1981); 

SELECT * 
  FROM my_table 
 ORDER 
    BY FIELD(relationship,'Founder','Faculty','Fellow')
     , year;
+--------------+------+
| relationship | year |
+--------------+------+
| Founder      | 1971 |
| Founder      | 1977 |
| Founder      | 1984 |
| Faculty      | 1971 |
| Faculty      | 1974 |
| Faculty      | 1975 |
| Fellow       | 1971 |
| Fellow       | 1972 |
| Fellow       | 1978 |
| Fellow       | 1981 |
+--------------+------+

但请注意,您可以在应用程序代码(php/javascript 等)中处理此类事情

【讨论】:

    【解决方案2】:

    创始人第一教员第二研究员第三..

    ORDER BY CASE Relationship 
      WHEN 'Founders' THEN 1 WHEN 'Faculty' THEN 2 WHEN 'Fellow' THEN 3 ELSE 4 END, 
      REL_START_YEAR -- Not entirely sure what your requirements are here.. 
    

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2021-10-07
      • 2013-06-30
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多