当我想使用带有子句的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查询..非常感谢你:)
答案 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
子句的作用。