SELECT
COUNT(reservations.personal_information_id) AS returningVisitors,
(SELECT COUNT(reservations.personal_information_id) FROM reservations) AS totalVisitors,
ROUND
(
(
COUNT(reservations.personal_information_id)
*
100
)
/
(SELECT COUNT(reservations.personal_information_id) FROM reservations)
) AS percent
FROM
reservations
GROUP BY
reservations.personal_information_id
DESC
LIMIT 1
此查询返回
╔═════════════════════════════════════════╗
║ returningVisitors totalVisitors percent ║
╠═════════════════════════════════════════╣
║ 1 62 2 ║
╚═════════════════════════════════════════╝
但应该返回
╔═════════════════════════════════════════╗
║ returningVisitors totalVisitors percent ║
╠═════════════════════════════════════════╣
║ 0 62 0 ║
╚═════════════════════════════════════════╝
有人知道如何制作它,以便它返回0而不是1吗?
答案 0 :(得分:1)
好吧,没有告诉您“您需要做X”(因为有评论说,您没有在帖子中放置足够的信息来确定您要完成的任务)-我而是说“这是您的查询当前正在执行的操作”,这可能有助于您了解问题所在。
首先,这是您的一般查询结构:
select
count(someField),
ResultOfASubQuery,
FieldWereGoingToIgnoreForNow
from table
group by columnA
该count(someField)无关紧要-它可以是count(otherField)或count(*)-它会返回groupBy中的记录数。因此,您真正要看的是:
select count(*)
from table
group by columnA
...又名,您可以为columnA的每个不同条目期望一行。在您的情况下,它是“ personalInformationID”-您将为每个ID获得一行。如果您有100个ID,那么您将获得100行(几乎可以肯定不是您想要的。)
现在,当我们在其中添加子查询内容时,它将为每一行运行子查询。因此,您的结果将类似于:
Row for ID#1 - 1, CountOfVisitors, DivisionResult
Row for ID#2 - 1, CountOfVisitors, DivisionResult
Row for ID#3 - 1, CountOfVisitors, DivisionResult
Row for ID#4 - 1, CountOfVisitors, DivisionResult
Row - ... etc
为什么第一列始终为“ 1”?因为那是count(*)为您提供的ID。只有一行与ID#1相匹配。与ID#2匹配的一行。与ID#3匹配的一行。
最后,您获得了“限制1”。这不会压缩数据,而是说:“我只想要第一行”,也就是对应于ID#1的行。因此,您的结果是:
Row for ID#1 - 1, CountOfVisitors, DivisionResult
希望这可以解释您当前的查询版本正在做什么,以及为什么它不适用于您。就像我提到的那样,由于我们不知道您要执行的操作,因此您并未真正详细地告诉您“执行此操作”。