SQL: 查询group by和带NA的条件
SQL: Query for group by and conditions with NA
我想编写一个 SQL 查询,在按两列分组后调用一列。我正在使用 RMySQL 包开发 R Studio。我的服务器是 MySQL.
table 看起来像这样。
organisation ID ZIP Order
Ikea ABC 123 2018-05-30
Ikea ABC 123 2018-06-01
Ikea ABC 123 2018-06-02
Ikea DEF 123 2018-06-20
Ikea DEF 123 2018-07-01
Ikea DEF 123 NA
Ikea GHI 123 2018-06-07
Ikea GHI 123 2018-06-09
我想按 organisation
、ID
和 ZIP
对 table 进行分组,并将组中最早的 Order
在六月。如果是 NA,我想忽略它们。
所以结果应该是这样的:
organisation ID ZIP Order
Ikea DEF 123 2018-06-20
Ikea DEF 123 2018-07-01
Ikea DEF 123 NA
Ikea GHI 123 2018-06-07
Ikea GHI 123 2018-06-09
这是我的尝试,但我不确定它是否正确。我不认为它像我希望的那样处理 NA。如果有人 checks/corrects 这个就好了。
SELECT t.*
FROM MyTable t JOIN (SELECT organisation, ID, ZIP
FROM MyTable WHERE organisation LIKE Ikea
GROUP BY organisation, ID, ZIP
HAVING MIN(Order) >= 2018-06-01 AND
MIN(Order) < 2018-07-01
) tt
ON tt.ID = t.ID AND
tt.organisation = t.organisation
我认为你的查询基本正确:
SELECT t.*
FROM MyTable t JOIN
(SELECT organisation, ID, ZIP
FROM MyTable
WHERE t.organisation = 'Ikea'
GROUP BY organisation, ID, ZIP
HAVING MIN(Order) >= '2018-06-01' AND
MIN(Order) < '2018-07-01'
) tt
ON tt.ID = t.ID AND
tt.organisation = t.organisation;
我在字符串和日期常量两边添加了单引号。
我假设 NA
在 MySQL 中确实表示为 NULL
。
我想编写一个 SQL 查询,在按两列分组后调用一列。我正在使用 RMySQL 包开发 R Studio。我的服务器是 MySQL.
table 看起来像这样。
organisation ID ZIP Order
Ikea ABC 123 2018-05-30
Ikea ABC 123 2018-06-01
Ikea ABC 123 2018-06-02
Ikea DEF 123 2018-06-20
Ikea DEF 123 2018-07-01
Ikea DEF 123 NA
Ikea GHI 123 2018-06-07
Ikea GHI 123 2018-06-09
我想按 organisation
、ID
和 ZIP
对 table 进行分组,并将组中最早的 Order
在六月。如果是 NA,我想忽略它们。
所以结果应该是这样的:
organisation ID ZIP Order
Ikea DEF 123 2018-06-20
Ikea DEF 123 2018-07-01
Ikea DEF 123 NA
Ikea GHI 123 2018-06-07
Ikea GHI 123 2018-06-09
这是我的尝试,但我不确定它是否正确。我不认为它像我希望的那样处理 NA。如果有人 checks/corrects 这个就好了。
SELECT t.*
FROM MyTable t JOIN (SELECT organisation, ID, ZIP
FROM MyTable WHERE organisation LIKE Ikea
GROUP BY organisation, ID, ZIP
HAVING MIN(Order) >= 2018-06-01 AND
MIN(Order) < 2018-07-01
) tt
ON tt.ID = t.ID AND
tt.organisation = t.organisation
我认为你的查询基本正确:
SELECT t.*
FROM MyTable t JOIN
(SELECT organisation, ID, ZIP
FROM MyTable
WHERE t.organisation = 'Ikea'
GROUP BY organisation, ID, ZIP
HAVING MIN(Order) >= '2018-06-01' AND
MIN(Order) < '2018-07-01'
) tt
ON tt.ID = t.ID AND
tt.organisation = t.organisation;
我在字符串和日期常量两边添加了单引号。
我假设 NA
在 MySQL 中确实表示为 NULL
。