Php 如何在sql中按两列进行分组?
我有两张桌子,一张是“活动”,第二张是“门票”: 事件表:Php 如何在sql中按两列进行分组?,php,mysql,mysqli,Php,Mysql,Mysqli,我有两张桌子,一张是“活动”,第二张是“门票”: 事件表: ============================ | event_id | event_name | ============================ | 101 | Running Event | | 102 | Cycling Event | ============================ 票务表: ========================================
============================
| event_id | event_name |
============================
| 101 | Running Event |
| 102 | Cycling Event |
============================
票务表:
==============================================================
| ticket_id | event_id | ticket_number | ticket_generate_date|
==============================================================
| 1 | 101 | 40001 | 2018-08-21 17:05 |
| 2 | 101 | 40002 | 2018-08-21 18:05 |
| 3 | 102 | 40001 | 2018-08-21 19:05 |
| 4 | 101 | 40003 | 2018-08-23 20:05 |
| 5 | 101 | 40004 | 2018-08-24 20:05 |
==============================================================
现在我希望运行查询,以便我的输出如下所示:
================================================
| count ticket | event_name | day wise data |
================================================
| 2 | Running Event | 2018-08-21 |
| 1 | Cycling Event | 2018-08-21 |
| 1 | Running Event | 2018-08-23 |
| 1 | Running Event | 2018-08-24 |
================================================
我尝试了以下查询:
SELECT COUNT(ticket_id), ticket_generate_date FROM Tickets
WHERE ticket_generate_date >= DATE_FORMAT(curdate(), '%Y-%m-01')
GROUP BY DATE_FORMAT(ticket_generate_date, '%d-%b');
您只需将第二个组选项添加到已有的选项中,并使用逗号 我还使用别名和内部联接来获取事件名称
SELECT
COUNT(t.ticket_id),
e.event_name,
DATE_FORMAT(t.ticket_generate_date, '%Y-%m-%d') as day_wise
FROM
Tickets t
INNER JOIN
Events e ON e.event_id = t.event_id
WHERE
t.ticket_generate_date >= DATE_FORMAT(curdate(), '%Y-%m-01')
GROUP BY
DATE_FORMAT(t.ticket_generate_date, '%Y-%m-%d'), e.event_name
它在这里工作:
如果在
group by
子句中包含一个额外的列名-在本例中,我选择了事件\u name
,则最终输出或多或少与预期一致。要输出请求的所有详细信息,尽管您需要连接两个表(或使用嵌套的select)
或者,为了进一步细化结果,您可以按日期排序
select
count( t.id ) as 'sales',
e.`event_name` as `event`,
date_format( t.`ticket_generate_date`, '%y-%m-%d' ) as `day wise data`
from `tickets` t
join `events` e on e.`event_id`=t.`event_id`
where t.`ticket_generate_date` >= date_format( curdate(), '%y-%m-01' )
group by e.event_name, date_format( t.`ticket_generate_date`, '%d-%b' )
order by `day wise data`;
+-------+---------------+---------------+
| sales | event | day wise data |
+-------+---------------+---------------+
| 2 | Running Event | 18-08-21 |
| 1 | Cycling event | 18-08-21 |
| 1 | Running Event | 18-08-23 |
| 1 | Running Event | 18-08-24 |
+-------+---------------+---------------+
试试这个:
select sum(ticket)id) ticket_count
(select event_name from Events where event_id = t.event_id) event_name,
cast(ticket_generate_date as date)
from Tickets t
group by event_id, cast(ticket_generate_date as date)
到目前为止你都试了些什么,桑托什?你试过什么吗?你有一个示例代码吗?@Rafael我尝试过这个查询选择计数(票证id),票证生成日期从票证中
ticket\u生成日期
>=日期格式(curdate(),'%Y-%m-01')按日期分组格式(ticket\u生成日期
,'%d-%b')Santosh,请将此添加到主任务中,以便每个人都能阅读它。:)可能重复的
select sum(ticket)id) ticket_count
(select event_name from Events where event_id = t.event_id) event_name,
cast(ticket_generate_date as date)
from Tickets t
group by event_id, cast(ticket_generate_date as date)