gpt4 book ai didi

mysql将多个查询分组

转载 作者:行者123 更新时间:2023-11-29 22:38:58 28 4
gpt4 key购买 nike

我尝试解释一下这个问题:我有一个用php+mysql搭建的酒店管理系统。我需要提取数量:

  • 当前预订访客
  • 到达的访客
  • 离开访客

我需要知道这些按“地区”分组的数字(地区是一个国家或一个国家的地区。我从存储的函数中获取此信息)。我尝试过很多次,但总是得到与我期望不符的值。

我尝试过按总和、按区域、按它们两个进行分组,我尝试过嵌套查询(可怕的结果......我不擅长子查询)。以下是 3 个主要查询:

当前访问者:

select p.num_persone, IFNULL(getcoderegione(c.regione),getNazioneCodeIstat(c.nazione)) regione, p.*, c.nazione, c.regione from prenota2015 p INNER JOIN clienti c ON c.idclienti = p.idclienti where p.iddatainizio < 94 and p.iddatafine >= 93 and p.idclienti != '0';

到达的访客:

select p.num_persone, IFNULL(getcoderegione(c.regione),getNazioneCodeIstat(c.nazione)) regione, p.*, c.nazione, c.regione from prenota2015 p INNER JOIN clienti c ON c.idclienti = p.idclienti  where p.iddatainizio < 94 and p.iddatainizio >= 93 and p.idclienti != '0';

离开访客:

select p.num_persone, IFNULL(getcoderegione(c.regione),getNazioneCodeIstat(c.nazione)) regione, p.*, c.nazione, c.regione from prenota2015 p INNER JOIN clienti c ON c.idclienti = p.idclienti  where p.iddatafine < 93 and p.iddatafine >= 92 and p.idclienti != '0';

IFNULL 东西检查它是否应该显示国家代码或地区代码。

表'clienti'包含上面提到的IFNULL检查的地区或国家的值,这对于分组子句很重要。

我期望的是这样的:

| region code | visitors present | visitors arriving | visitors leaving
------------------------------------------------------------------------
| 219 | 3 | 1 | 1 |
------------------------------------------------------------------------
| 186 | 2 | 0 | 0 |

等等。提问时间:我愿意做吗?

我上次尝试过:

SELECT DISTINCT 
IFNULL(getcoderegione(c.regione),getNazioneCodeIstat(c.nazione)) regione,
pres.presenze,
part.partenze,
arr.arrivi
FROM
(
select COUNT(p.idprenota) partenze, p.idclienti
from prenota2015 p
INNER JOIN clienti c ON c.idclienti = p.idclienti
where
p.iddatafine < 91
and p.iddatafine >= 90
GROUP BY regione
) as part,
(
select COUNT(p2.idprenota) arrivi, p2.idclienti
from prenota2015 p2
INNER JOIN clienti c ON c.idclienti = p2.idclienti
where
p2.iddatainizio < 91
and p2.iddatainizio >= 90
GROUP BY regione
) as arr,
(
select COUNT(p3.idprenota) presenze, p3.idclienti
from prenota2015 p3
INNER JOIN clienti c ON c.idclienti = p3.idclienti
where
p3.iddatainizio < 91
and p3.iddatafine >= 90
GROUP BY regione
) as pres,
clienti c

但这是一次绝望的尝试,试图了解如何绕过它。

有什么帮助吗?有建议吗?

非常感谢

最佳答案

SELECT q1.regione,
q1.total AS current_visitors,
q2.total AS arriving_visitors,
q1.total AS leaving_visitors
FROM (
SELECT sum(p.num_persone) total,
IFNULL(getcoderegione(c.regione), getNazioneCodeIstat(c.nazione)) regione
FROM prenota2015 p
INNER JOIN clienti c ON c.idclienti = p.idclienti
WHERE p.iddatainizio < 94
AND p.iddatafine >= 93
AND p.idclienti != '0'
GROUP BY regione
) q1
INNER JOIN (
SELECT sum(p.num_persone) total,
IFNULL(getcoderegione(c.regione), getNazioneCodeIstat(c.nazione)) regione
FROM prenota2015 p
INNER JOIN clienti c ON c.idclienti = p.idclienti
WHERE p.iddatainizio < 94
AND p.iddatainizio >= 93
AND p.idclienti != '0'
GROUP BY regione
) q2 ON q1.regione = q2.regione
INNER JOIN (
SELECT sum(p.num_persone) total,
IFNULL(getcoderegione(c.regione), getNazioneCodeIstat(c.nazione)) regione
FROM prenota2015 p
INNER JOIN clienti c ON c.idclienti = p.idclienti
WHERE p.iddatafine < 93
AND p.iddatafine >= 92
AND p.idclienti != '0'
GROUP BY regione
) q3 ON q1.regione = q3.regione;

或者,正如 moo 建议的那样,创建三个查询的 View ,这将使这个查询更加整洁

关于mysql将多个查询分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com