Dav*_*vid 4 mysql sql group-by
假设我有以下SQL查询:
SELECT Meeting.id AS meetingId, Bill.id AS billId
FROM Meeting
LEFT JOIN Bill ON Meeting.FK_BillId = Bill.id
Run Code Online (Sandbox Code Playgroud)
这输出如下:
meetingId | billId
------------------
a | NULL
b | NULL
c | 1
d | 1
e | 1
f | 2
g | 2
Run Code Online (Sandbox Code Playgroud)
我想要以下输出,billId的组不是NULL:
meetingId | billId
------------------
a | NULL
b | NULL
c | 1
f | 2
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?顺便说一下,我并不关心分组结果的模糊会议.
谢谢你的帮助!
在SQL Server:
SELECT meetingId, billid
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY billId ORDER BY meetingID) AS rn,
m.*
FROM mytable m
) q
WHERE rn = 1 OR billid IS NULL
Run Code Online (Sandbox Code Playgroud)
ANSI:
SELECT MIN(meetingId), billid
FROM mytable
WHERE billid IS NOT NULL
GROUP BY
billId
UNION ALL
SELECT meetingId, billId
FROM mytable
WHERE billid IS NULL
Run Code Online (Sandbox Code Playgroud)
MySQL:
SELECT meetingId, billid
FROM mytable
WHERE billid IS NOT NULL
GROUP BY
billId
UNION ALL
SELECT meetingId, billId
FROM mytable
WHERE billid IS NULL
Run Code Online (Sandbox Code Playgroud)
只要它属于正确的组,MIN如果你真的不关心meetingID将返回什么,这是一种更有效的方法.