Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql查询以计算连接三个表的行数,并计算一个表的行数_Mysql_Sql - Fatal编程技术网

mysql查询以计算连接三个表的行数,并计算一个表的行数

mysql查询以计算连接三个表的行数,并计算一个表的行数,mysql,sql,Mysql,Sql,我在MYSQL查询中遇到了一个问题。 我有三个表,一个是凭证表,另一个是凭证客户端。 在凭证\ U客户表中,我有一个与凭证表相关的凭证id列,我想从客户表中计算相关行。 若凭证表的id为2且凭证客户端为2,则查询将从客户端表的“年龄组”列中进行检查,其中年龄组为成人、儿童或婴儿 下面是一些桌子的图片,以了解更多细节。 请帮帮我 凭证表 客户表 凭证客户端表 我正试着这样做 SELECT `v`.*, `a`.`name` as `agent_name`, COUNT(CASE WHEN c.

我在MYSQL查询中遇到了一个问题。 我有三个表,一个是凭证表,另一个是凭证客户端。 在凭证\ U客户表中,我有一个与凭证表相关的凭证id列,我想从客户表中计算相关行。 若凭证表的id为2且凭证客户端为2,则查询将从客户端表的“年龄组”列中进行检查,其中年龄组为成人、儿童或婴儿 下面是一些桌子的图片,以了解更多细节。 请帮帮我

凭证表

客户表

凭证客户端表

我正试着这样做

  SELECT `v`.*, `a`.`name` as `agent_name`, COUNT(CASE WHEN c.age_group = 'Adult' THEN c.id END) AS t_adult, COUNT(CASE WHEN c.age_group = 'Child' THEN c.id END) AS t_child, COUNT(CASE WHEN c.age_group = 'Infant' THEN c.id END) AS t_infant, COUNT(c.id) as total FROM `voucher` `v` JOIN `voucher_client` `vc` ON `vc`.`voucher_id`=`v`.`id` JOIN `client` `c` ON `vc`.`client_id`=`c`.`id` JOIN `tbl_users` `a` ON `a`.`userId`=`v`.`agent_id` LEFT JOIN `voucher_hotel` `vh` ON `vh`.`voucher_id`=`v`.`id` WHERE `v`.`isDeleted` =0 GROUP BY `v`.`id` ORDER BY `v`.`id` DESC 
像这样的预期产出

voucher_id t_adult    t_child    t_infant
 1            2           0         0
 2            1           0         0
如果只希望在结果中显示v.id,则在查询中将v.*替换为v.id

顺便说一句,大多数数据库甚至不允许使用*作为分组依据。MySql在这方面偏离了ANSI SQL标准

如果需要连接到具有1-N关系的额外表?然后可以计算不同的值。因此,总数仅反映唯一的客户ID

选择 v、 作为凭证的id\u id, COUNTDISTINCT CASE当c.age_group=成人时,c.id以t_成人结束, COUNTDISTINCT CASE当c.age\u group='Child'时,则c.id以t\u Child结尾, COUNTDISTINCT CASE当c.age_group=婴儿时,c.id以t_婴儿结束 -,将*计为总数 -,COUNTc.id作为total_clientid-值上的计数不计算NULL -,COUNTDISTINCT c.id作为总\唯一\客户端id 来自凭证v 在vc上加入凭证\客户端vc。凭证\ id=v.id 在c.id=vc.client\u id上加入客户机c -左加入凭证\酒店vh在vh上。凭证\ id=v.id 其中v.isDeleted=0 -c.age_group=‘成人’——取消注释,只计算成人 按v.id分组 按v.id订购
请不要发布样本数据的图像,而是以文本格式或更好的方式包含样本数据,以便使用任何在线工具,还应包含完整的表定义和预期输出输出您的查询结果是什么?您的查询应给出正确的结果。输出有什么问题?完整查询已更新另一个是位于左联接中的hotel表,因为如果hotel表中存在或不存在数据,则我希望部分联接该表。必须显示数据。问题是由左连接引起的“tbl_用户”表中的数据是什么?另外,对于凭证id 1和凭证id 2,凭证表中的“代理id”是什么?将更新完整的查询另一个是位于左联接中的酒店表,因为如果必须显示酒店表数据中是否存在数据,我希望部分联接该表。问题就出在那个左边join@NadeemIjaz因此,现在有2个表添加到该查询中。tbl_用户和代金券_酒店。我在案例之前添加了一个独特的WHEN's。这样,它将只计算唯一的clientid,这些clientid与额外的左连接相乘help@NadeemIjaz你应该在你的问题中添加一些示例数据。然后通过在WHERE子句中添加查询条件来更改查询。因为仅仅加入一个1-N关系而不使用它的数据似乎是毫无意义的。我有一种预感,酒店id也必须通过添加到组中?我还想知道这是否真的需要。。。从凭证\酒店右加入凭证。。。相反此外,预期结果是否保持不变?你有没有试过这些。。。当。。。增加了什么?