将mysql查询输出到shell脚本

将mysql查询输出到shell脚本,mysql,bash,shell,Mysql,Bash,Shell,大家好,我有下面的mysql查询,我需要将其输出到一个表中,以便通过电子邮件发送给客户!。我只需要将结果格式化为表格 select division_name, count(*) "Total Cases on CTS", sum(if(Date(Filing_Date) = DATE_SUB(curdate(), INTERVAL 1 DAY), 1,0)) "entered yesterday", sum(if(DATE(Filing_date) = curd

大家好,我有下面的mysql查询,我需要将其输出到一个表中,以便通过电子邮件发送给客户!。我只需要将结果格式化为表格

 select division_name,
     count(*) "Total Cases on CTS",
     sum(if(Date(Filing_Date) = DATE_SUB(curdate(), INTERVAL 1 DAY), 1,0)) "entered yesterday",
     sum(if(DATE(Filing_date) = curdate(), 1, 0)) 'entered today',
     sum(if(YEAR(filing_date) = YEAR(curdate()) AND Month(filing_date) = Month(curdate()), 1,0)) "entered this month",
     sum(if(YEAR(filing_date) = YEAR(DATE_SUB(curdate(), INTERVAL 1 MONTH)) AND Month(filing_date) = Month(DATE_SUB(curdate(), INTERVAL 1 MONTH)), 1,0)) as entered_last_month
     from cases2v
     where court_rank_name like 'High Court'
          OR court_rank_name like 'Magistrate Court'
     group by division_name";
我曾尝试将查询输出到csv文件,然后在linux(Centos 7)中使用
ssconvert
转换为excel并使用后缀发送电子邮件,输出文件看起来不太好。。它缺少表头

我在想,使用shell脚本将查询输出到一个数组,然后通过结果循环创建一个表会更好更快,但我不知道怎么做!这就是我尝试过的

dbquery=$(mysql -u user -ppass -e "use db_name; select division_name, count(*) "Total Cases on CTS", sum(if(Date(Filing_Date) = DATE_SUB(curdate(), INTERVAL 1 DAY), 1,0)) "entered yesterday", sum(if(DATE(Filing_date) = curdate(), 1, 0)) 'entered today', sum(if(YEAR(filing_date) = YEAR(curdate()) AND Month(filing_date) = Month(curdate()), 1,0))  "entered this month", sum(if(YEAR(filing_date) = YEAR(DATE_SUB(curdate(), INTERVAL 1 MONTH)) AND Month(filing_date) = Month(DATE_SUB(curdate(), INTERVAL 1 MONTH)), 1,0)) as entered_last_month from cases2v  where court_rank_name like 'High Court' OR court_rank_name like 'Magistrate Court' group by division_name;")

array=($(for i in $dbquery; do echo $i; done )) 

您可以尝试使用union将列标题添加到结果中。另外,要注意你的引语。我对列和表使用反勾号,对字符串使用单引号,只是为了清楚和避免混淆。你有几个地方在双引号中加了双引号

SELECT 
    'division_name' AS `division_name`,
    'Total Cases on CTS' AS `Total Cases on CTS`,
    'entered yesterday' as `entered yesterday`,
    'entered today' AS `entered today`,
    'entered this month' AS `entered this month`,
    'entered_last_month' AS `entered_last_month`
UNION
SELECT 
    `division_name`,
    count(*) AS `Total Cases on CTS`,
    sum(if(Date(Filing_Date) = DATE_SUB(CURDATE(), INTERVAL 1 DAY), 1,0))  AS `entered yesterday`,
    sum(if(DATE(Filing_date) = CURDATE(), 1, 0)) AS `entered today`,
    sum(if(YEAR(filing_date) = YEAR(CURDATE()) AND Month(filing_date) = Month(CURDATE()), 1,0)) AS `entered this month`,
    sum(if(YEAR(filing_date) = YEAR(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND Month(filing_date) = Month(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), 1,0)) as `entered_last_month`
FROM cases2v
WHERE court_rank_name LIKE 'High Court'
    OR court_rank_name LIKE 'Magistrate Court'
GROUP BY division_name";

感谢Sloan的回复,但在第一个select语句中,实际列只有三个..”部门名称、部门id(CTS上的总案例)和“提交日期”(对于今天输入、本月输入、上月输入和昨天输入)。这意味着select语句的列数不相同时会出错。事实上,这就是我在运行提供的解决方案后遇到的错误。'使用的SELECT语句具有不同的列数。我已解析两个SELECT语句中的列。只是要确保列数相同,并且联合工作正常。。谢谢!我错过了“昨天进入”专栏。第一列选择5列,第二列选择6列。如果它基本上起作用,如果你能接受答案,我将不胜感激。我还有另一个挑战,伙计们。。我需要将下面的查询输出到一个表中。我认为bash脚本对于挑战来说会更快,下面是我目前为止所做的,但我很抱歉。。我该怎么办。。表是指SQL表还是表格式的表示?如果是前者,请编辑问题并添加目标表的模式。