mysql - 通过 2 列相等的 sql 列出一个表
问题描述
我有下表:
Table: reservations
| name | phone_nr | progam | #invited_people | invitedby |
---------------------------------------------------------------
| Dustin | 5555555 | 1 | 3 | NULL |
| Joe | NULL | 1 | 0 | Dustin |
| Mary | NULL | 1 | 0 | Dustin |
| Tylor | 444555 | 1 | 1 | NULL |
| Cody | NULL | 1 | 0 | Tylor |
| Martin | NULL | 1 | 0 | Dustin |
我想把结果排在预订人之后(invitedby == NULL
) 发出邀请的人应该排在最前面,被这个人邀请的人应该在后面。
期望的输出:
Table: reservations
| name | phone_nr | progam | #invited_people | invitedby |
---------------------------------------------------------------
| Dustin | 5555555 | 1 | 3 | NULL |
| Joe | NULL | 1 | 0 | Dustin |
| Mary | NULL | 1 | 0 | Dustin |
| Martin | NULL | 1 | 0 | Dustin |
| Tylor | 444555 | 1 | 1 | NULL |
| Cody | NULL | 1 | 0 | Tylor |
我不太擅长 SQL。我尝试过GROUP BY
“name”和“invitedby”列,但没有用。谢谢您的帮助!
创建和插入语句:
CREATE TABLE reservations (
`name` varchar(255) PRIMARY KEY,
`phone_nr` varchar(30),
`program` int NOT NULL,
`#invited_people` int NOT NULL,
`invitedby` varchar(255)
);
INSERT INTO reservations (name, phone_nr, program, `#invited_people`, invitedby) VALUES ('Dustin', '5555555', 1, 3, NULL), ('Joe', NULL, 1, 0, 'Dustin'), ('Mary', NULL, 1, 0, 'Dustin'), ('Tylor', 444555, 1, 1, NULL), ('Cody', NULL, 1, 0, 'Tylor'), ('Martin', NULL, 1, 0, 'Dustin')
我尝试过的查询(但没有用):
SELECT * FROM reservation GROUP BY name,invitedby
PS:我在本地机器上使用 MariaDB 和 XAMPP。
解决方案
您可以使用order by
:
order by coalesce(invitedby, name), -- groups the inviter and invitees together
(invitedby is null) desc, -- puts the inviter first
name -- orders the rest by name
推荐阅读
- android - 无法获取资源'http://...firebase-measurement-connector-impl-17.0.5-javadoc.jar
- python - Python(硒)中的网络搜索自动化没有返回结果
- javascript - Javascript:从 HTML 输入返回值的问题
- python - 如何在 Python 中使用多个但数量有限的线程来处理列表
- sql - 高效地将一对多多对多数据库映射到 Golang 中的结构
- matlab - 如何从一组符号方程中生成一个作为特定变量函数的方程?
- python - 通过嵌入字典的列表进行过滤
- java - 如何计算循环生成的值的总和
- ruby - Rails捆绑安装不起作用'导致json版本错误
- node.js - 如何让我的机器人向我的 Discord 中的某个频道发送消息