mysql - 为什么整数转换不适用于整数 group_concat() 列表?

标签 mysql sql

我被困在需要连接表 ID 的查询中。从那组 ID 中,我需要在子查询中获取那些行。但是当我尝试这样做时,MySQL 将 group_concat() 视为一个字符串。所以那个条件变成假的。

select count(*) 
from rides r 
where r.ride_status = 'cancelled' 
      and r.id IN (group_concat(rides.id))

*************** 下面的原始查询 **************

-- Daily Earnings for 7 days [Final]

select 
          group_concat(rides.id) as ids, 
          group_concat(ride_category.name) as rideType, 
          group_concat(ride_cars.amount + ride_cars.commission) as rideAmount ,
          group_concat(ride_types.name) as carType,
          count(*) as numberOfRides,
          (
            select count(*) from rides r where r.ride_status = 'cancelled' and r.id IN  (group_concat(rides.id) )
          ) as cancelledRides,
          (
            select count(*) from rides r where r.`ride_status` = 'completed' and r.id IN (group_concat(rides.id))
          ) as completedRides,
          group_concat(ride_cars.status) as status,
          sum(ride_cars.commission) + sum(ride_cars.amount) as amount, 
          date_format(from_unixtime(rides.requested_at/1000 + rides.offset*60), '%Y-%m-%d') as requestedDate, 
          date_format(from_unixtime(rides.requested_at/1000 + rides.offset*60), '%V') as week
from 
          ride_cars,
          rides,
          ride_category,
          ride_type_cars,
          ride_types
where 
          ride_cars.user_id = 166
          AND (rides.ride_status = 'completed' or.  rides.ride_status = 'cancelled')
          AND ride_cars.ride_id = rides.id 
          AND (rides.requested_at >= 1559347200000 AND requested_at < 1561852800000)
          AND rides.ride_category = ride_category.id 
          AND ride_cars.car_model_id = ride_type_cars.car_model_id
          AND ride_cars.ride_type_id = ride_types.id
group by
          requestedDate;

任何解决方案将不胜感激。

最佳答案

尝试替换子查询

(select count(*) from rides r where r.ride_status = 'cancelled' and r.id IN  (group_concat(rides.id) )) as cancelledRides,

下面使用 SUM 和 CASE 进行计数,它将使用 GROUP BY

SUM(CASE WHEN rides.ride_status = 'cancelled' THEN 1 ELSE 0 END) as cancelledRides

completedRides 也是如此

并转向使用 JOIN 而不是隐式连接

关于mysql - 为什么整数转换不适用于整数 group_concat() 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56454608/

相关文章:

mysql - 无法启动 SSH 隧道管理器 mysql workbench Ubuntu

mysql - 如何删除 mysql 中的前导斜杠和尾随斜杠

sql - 如何使用 GORM 在 postgresql 中存储 ipv4 和 ipv6 地址

sql - MySQL "in clause"内的项目数

php - 如果值匹配则更新行,否则插入新行

php:Select 语句仅在 Linux Mint 中抛出错误

python - 在 MySQL 上部署 Django 给出 #1071 错误 "Specified key was too long"

sql - 文件系统管理工具

java - 将日期字符串转换为 java.sql.Date 格式

php - 在没有设置 Laravel 数据库时返回插入 ID