数与没有返回任何东西

时间:2014-01-17 01:06:55

标签: mysql

当我想使用带有子句的count函数时,我很好奇如何编写正确的查询。 所以我有一张名为:seat的桌子 以下是专栏:

SEAT

ID_SEAT      ID_TIME      STATUS
-----------------------------------------
  A1      |      1    |  Available
  A2      |      2    |  Available
  A3      |      1    |  Available
  A4      |      1    |  Reserved

等等。 我有119行状态为“可用”,1行状态为“保留”。

以下是MySQL中的查询:

SELECT status, COUNT(status) AS number FROM seat
WHERE ID_SEAT = 'A3' AND ID_TIME = '1'
HAVING COUNT(status) IN (SELECT COUNT(status) from SEAT where status = 'Available')

但查询没有显示任何内容..任何帮助和明确的答案都会非常有用..谢谢你:))

编辑:

我真正想要展示的是这样的:

STATUS        NUMBER
---------------------
Available      119

上面的STATUS字段用于某个ID_SEAT ...在我的情况下,ID_SEAT ='A3',ID_TIME = 1

EDITTTTT:

谢谢你给我的所有答案.. 现在我可以清楚地解决它..

所以我使用“UNION”分隔查询..我正在使用2个查询来使其工作..

这里是代码:

SELECT status from seat where ID_SEAT = 'A3' AND ID_TIME = '1' UNION 
SELECT COUNT(status) from seat
where status = 'Available'

但是上面的代码适用于mysql查询..非常感谢你:)

3 个答案:

答案 0 :(得分:0)

任何时候你在查询的选择部分使用像count,sum,avg等的聚合函数,以及非聚合函数 - 在这种情况下的“状态” - 你必须有一个“分组由“条款。

所以它看起来像这样:

SELECT status, COUNT(status), AS number FROM seat
HAVING COUNT(status) IN (SELECT COUNT(status) FROM SEAT WHERE status = 'Available')
GROUP BY status

这样就可以看到两行。一个用于计数119,一个用于保留,计数为1.

答案 1 :(得分:0)

如果您希望结果与您展示的结果一样。

SELECT status, COUNT(status) as number
FROM seat
WHERE status = 'Available'
GROUP BY status

如果您想查看座位状态,只需选择状态,无需计算

SELECT status
FROM seat
WHERE ID_SEAT = 'A3' AND ID_TIME = '1'

如果必须,请返回座位状态和所有可用座位数

SELECT status,(SELECT count(*) FROM seat WHERE status = 'Available') as number
FROM seat
WHERE ID_SEAT = 'A3' AND ID_TIME = '1'

答案 2 :(得分:0)

在您的查询中,表达式(SELECT COUNT(status) from SEAT where status = 'Available')将返回119.但是,您只选择一行,因此这两个值永远不会相等。

我想你想要:

SELECT status, COUNT(status) AS number
FROM seat
GROUP BY status;

这将返回所有状态。如果您真的只想要'Available',请使用where

进行过滤
SELECT status, COUNT(status) AS number
FROM seat
WHERE status = 'Available';

编辑:(基于评论中的澄清)

哦,如果你只想要seat 23号的状态信息,你可以用having条款得到它:

SELECT status, COUNT(status) AS number
FROM seat
GROUP BY status
HAVING sum(id_seat = '23A') > 0;

having子句计算每个状态的行数,其中id_seat的值为23。您希望status至少有一行,这就是having子句的作用。