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

标签 mysql sql

我在 MYSQL 查询中遇到问题。 我有三个表,第一个是凭证表其他客户,第三个是凭证表客户端。 在oucher_client 表中,我有与凭证表相关的凭证id 列,我想计算客户端表中的相关行。 例如,如果优惠券表的 id 为 2 并且优惠券客户为 2,则查询将从客户表 age_group 列中进行检查,其中 age_group 是成人、 child 或婴儿 这里有一些表格图片以了解更多详细信息。 请帮帮我

凭证表

enter image description here

客户表

enter image description here

优惠券客户表

enter image description here

我正在尝试这样做

  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 关系的额外表?然后您可以计算不同的值。这样总数仅反射(reflect)唯一的 clientid。

SELECT
  v.id AS voucher_id,
  COUNT(DISTINCT CASE WHEN c.age_group = 'Adult'  THEN c.id END) AS t_adult,
  COUNT(DISTINCT CASE WHEN c.age_group = 'Child'  THEN c.id END) AS t_child,
  COUNT(DISTINCT CASE WHEN c.age_group = 'Infant' THEN c.id END) AS t_infant
  -- , COUNT(*) as total
  -- , COUNT(c.id) as total_clientid -- count on value doesn't count NULL's
  -- , COUNT(DISTINCT c.id) as total_unique_clientid
FROM voucher v
JOIN voucher_client vc ON vc.voucher_id = v.id
JOIN client c ON c.id = vc.client_id
-- LEFT JOIN voucher_hotel vh ON vh.voucher_id = v.id
WHERE v.isDeleted = 0
--  AND c.age_group = 'Adult' -- uncomment this to only count the adults
GROUP BY v.id 
ORDER BY v.id

关于mysql查询计算连接三个表的行数并计算一个表的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379290/

相关文章:

php - 如何从类内的准备好的语句中获取数组

MySQL 关于 employee 和 staff 以及使用连接的空值

php - 为什么 phpmyadmin 没有注意到我已经达到了最大 php 执行时间?

mysql - sql中的条件Where子句

php - 使用表中的 LIMIT 选择 'person' 的数据

mysql - 这个 alter table 查询有什么问题?

php - 从同一个php文件中的两个mysql表获取数据

mysql - 计算列上的内连接

mysql - 带撇号的文本未在数据库中更新

sql - R 中 SQL 的 IN 关键字的等价物是什么?