MySQL: группировать по столбцам в определенном порядке (не только ASC или DESC) - PullRequest
0 голосов
/ 02 мая 2018

У меня есть запрос, который работает ... однако я хочу иметь возможность сортировать / упорядочивать определенным образом. Мой текущий запрос (например) возвращает дату, подобную этой:

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');

Однако я бы хотел отсортировать / заказать / сгруппировать вещи

ПЕРВЫЙ по столбцу Отношения .. но не только по альфа-типу .. Я хочу, чтобы он был указан как

Основатели первыми Факультет второй Товарищ третий ...

и затем каждая указанная выше группа сортируется по 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 ()?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018
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 и т. Д.)

0 голосов
/ 02 мая 2018

Основатели первого факультета, второй сотрудник третьего ..

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.. 
...