MySQL,在 GROUP BY 中筛选
MySQL, filter in GROUP BY
我正在开发一个 MySQl 数据库,并且有一个类似库存跟踪系统的东西。带有设备的库存编号,领取人,领取时间,归还时间。如果返回的列为空,则该人仍然拥有该设备。
|InventoryNumber | user | receive | returned |
+----------------+-------+------------+------------+
| X1 | Mark | 2017-01-01 | 2017-01-03 |
| X1 | Mark | 2017-01-03 | null |
| X2 | Frank | 2017-01-01 | null |
现在我想知道哪些设备没有被使用。所以首先我必须 GROUP BY InventoryNumber
但 "show" null
。后记我必须过滤 WHERE returned IS NOT NULL
我知道如何单独做到这一点,但在 GROUP BY
之后他总是占据第一行而不是带有 null
的那一行,所以我不能使用 WHERE
.
希望你能理解我的问题并能帮助我。
这将 return 所有没有一行为 NULL 的数字。快速提醒:WHERE 筛选行 HAVING 筛选组。
SELECT InventoryNumber
GROUP BY InventoryNumber
HAVING SUM(returned IS NULL)=0
您可以使用 NOT IN
的子查询,例如:
SELECT *
FROM table
WHERE returned IS NOT NULL
AND InventoryNumber NOT IN (
SELECT InventoryNumber
FROM table
WHERE returned IS NULL
);
你可以试试这个:
select
`InventoryNumber`
from
`track`
where
`returned` is NOT NULL
group by `InventoryNumber`;
我正在开发一个 MySQl 数据库,并且有一个类似库存跟踪系统的东西。带有设备的库存编号,领取人,领取时间,归还时间。如果返回的列为空,则该人仍然拥有该设备。
|InventoryNumber | user | receive | returned |
+----------------+-------+------------+------------+
| X1 | Mark | 2017-01-01 | 2017-01-03 |
| X1 | Mark | 2017-01-03 | null |
| X2 | Frank | 2017-01-01 | null |
现在我想知道哪些设备没有被使用。所以首先我必须 GROUP BY InventoryNumber
但 "show" null
。后记我必须过滤 WHERE returned IS NOT NULL
我知道如何单独做到这一点,但在 GROUP BY
之后他总是占据第一行而不是带有 null
的那一行,所以我不能使用 WHERE
.
希望你能理解我的问题并能帮助我。
这将 return 所有没有一行为 NULL 的数字。快速提醒:WHERE 筛选行 HAVING 筛选组。
SELECT InventoryNumber
GROUP BY InventoryNumber
HAVING SUM(returned IS NULL)=0
您可以使用 NOT IN
的子查询,例如:
SELECT *
FROM table
WHERE returned IS NOT NULL
AND InventoryNumber NOT IN (
SELECT InventoryNumber
FROM table
WHERE returned IS NULL
);
你可以试试这个:
select
`InventoryNumber`
from
`track`
where
`returned` is NOT NULL
group by `InventoryNumber`;