MySQL列轉行統計資料

2021-08-03 05:59:18 字數 2422 閱讀 2625

筆者在開發的過程中遇到了這樣的問題。

其中item_id是固定的字典。值是死的。

其中item_id 等於 1,2,3的值是每乙個work_quoted_id都需要相乘的。

相當於乙份訂單人工費和施工人數以及施工天數都是一定存在的並且是相乘的關係。

其他的item_id的值是需要相加的。

所以,運算的規則是

item1、item2、item3的quantity值是要相乘的。在加上item4、item5、item6的quantity值。

所以上述期望的值應該是670

mysql 提供了sum求和函式。但是沒有提供相乘的函式。

但還是有辦法做的。筆者這裡採用了列傳行的辦法進行統計資料。 sql如上

select  target.workdays * target.workfee * target.workdays

from (select

max(case item_id when

'1'then quantity end ) as workfee,

max(case item_id when

'2'then quantity end ) as workernumber,

max(case item_id when

'3'then quantity end ) as workdays

from order_worker_quote_detail where work_quote_id=1) as target;

我們可以拿到執行結果

在這裡讀者可能不是很明白。

其實關鍵在於 case when then

max(case item_id when '2'

then quantity end ) as workernumber,

這裡筆者可以給出乙個demo

drop

table

ifexists

`tabname`;

create

table

`tabname` (

`id`

int(11) not

null auto_increment,

`name`

varchar(20) default

null,

`date`

date

default

null,

`scount`

int(11) default

null,

primary

key (`id`)

) engine=innodb auto_increment=9

default charset=utf8;

insert

into

`tabname`

values ('1', '**', '2013-09-01', '10000');

insert

into

`tabname`

insert

into

`tabname`

values ('3', '**', '2013-09-02', '30000');

insert

into

`tabname`

insert

into

`tabname`

values ('5', '**', '2013-09-03', '31000');

insert

into

`tabname`

insert

into

`tabname`

values ('7', '**', '2013-09-04', '35000');

insert

into

`tabname`##

select

date ,

max(case name when

'**'

then scount else

0end ) **,

max(case name when

then scount else

0from tabname

group

bydate

可以得到執行結果

demo參考自:

統計mysql一列行數 統計資料行數

select count from 語法用於從資料表中統計資料行數。語法 select count column from tb name 該 sql 語法用於統計某一字段的資料行數,count 內不能是多個字段,但可以是 號。例子 conn mysql connect localhost root...

mysql按周統計資料

主要就是使用date format這個方法 select date format createtime,y u weeks,count count from user group by weeks order by weeks desc u 周 00 53 星期日是一周的第一天 u 周 00 53 ...

分組統計資料

with a as select convert varchar 10 starttime,120 starttime,case when organid like 0226 then else 非 end as deptname,sum case when billableseconds 0 th...