如何为DISTINCT COUNT的输出创建新表,以将其分布在行中,而不是列中?

问题描述 投票:0回答:1

我的查询显示具有相应票证号的买家的DISTINCT计数。我需要自动计算SOLD和BALANCE列并将其保存到数据库中,或者将其保存到现有表(table1)中,并具有与票务相对应的行。我已经筋疲力尽,去过谷歌很多次,但我只是想不通。因此,我尝试通过尝试在数据库中创建一个新表来显示DISTINCT COUNT的输出来尝试另一种选择,但是我没有找到要遵循的示例查询,因此我可以将INNER JOIN用于带有table1的新表, PRINTED,SOLD在同一张表中,因此我可以减去这些列以获得BALANCE列的值。现有的table1和table2是通过html形式在数据库中的记录:

Table1
Ticket Serial     Printed Copies        SOLD(sold)        Balance
TS#1234                50           ?(should be auto        ?
TS#5678                80           ?(should be auto        ?
(so on and so forth...)

Table2
Buyer             Ticket Serial
Adam               TS#1234
Kathy              TS#1234
Sam                TS#5678
(so on and so forth...)

COUNT DISTINCT输出数量。售票数:

 <td> <?php print '<div align="center">'.$row['COUNT(ticketserial)'];?></td>
...
 $query = "SELECT *, COUNT(ticketserial) FROM buyers WHERE ticketsold != 'blank' GROUP BY 
 ticketserial ";  

这是COUNT个输出,看起来像这样:

Ticket Serial------Distinct Count
TS#1234                     7
TS#5678                     25
(so on and so forth...)

我尝试通过UPDATE或INSERT和foreach循环更新SOLD列和BALANCE列但是仅更新了表中的第一行

Table1
Ticket Serial     Printed Copies   Sold    Balance
TS#1234                50         **7**         0
TS#5678                80         **0**         0
TS#8911                40         **0**         0
(so on and so forth...)

注:表1中的字段名称“已售”与表2中的字段名称“售票”不同,因为前者是数量,后者是票务。

php mysql count insert distinct
1个回答
0
投票

您的问题有点难以理解。但是,这看起来像是汇总查询上的left join

select
    t1.ticket_serial,
    t1.printed_copies,
    coalesce(t2.sold, 0) sold,
    t1.printed_copies - coalesce(t2.sold, 0) balance
from table1 t1
left join (
    select ticket_serial, count(*) sold 
    from table2 
    group by ticket_serial
) t2 on t2.ticket_serial = t1.ticket_serial

如果要查看update主表:

update table1 t1
left join (
    select ticket_serial, count(*) sold 
    from table2 
    group by ticket_serial
) t2 on t2.ticket_serial = t1.ticket_serial 
set 
    t1.sold = coalesce(t2.sold, 0),
    t1.balance = t1.printed_copies - coalesce(t2.sold, 0)

我实际上不建议在主表中存储soldbalance-这是派生的信息,可以在需要时轻松计算,并且维护起来很繁琐。如果需要,您可以使用上面的第一个SQL语句创建一个视图,这将为您提供有关数据的始终最新的视图。

© www.soinside.com 2019 - 2024. All rights reserved.