показ грандиозного значения в поле - PullRequest
0 голосов
/ 04 марта 2011

добрый вечера. я подумал, возможно ли показать сумму или общий итог выбранного поля в таблице и по отношению к дате:

например, я хочу знать общее потребление пива в моем отеле каждый месяц.

у меня здесь мой стол на услуги:

[services_id[pk],
customer_id[fk],
date_in,date_out,room_type,room_number,
extra_ref,
extra_bed,extra_snack,
extra_beer,extra_softdrinks,
extra_pillows,extra_breakfast,
extra_snack_q,
extra_beer_q,
extra_softdrinks_q,
extra_pillows_q,
extra_breakfast_q]

Можете ли вы дать совет, как мне его получить? заранее спасибо:

-renz

Ответы [ 2 ]

0 голосов
/ 04 марта 2011
SELECT DATE_FORMAT(date_in,"%m-%Y") AS month,SUM(extra_beer) AS beers
FROM your_table
GROUP BY month

это вернет что-то вроде этого:

02-2011 | 43
03-2011 | 52

если вы хотите ограничить запрос в зависимости от даты, просто добавьте ограничение WHERE перед GROUP BY

0 голосов
/ 04 марта 2011
SELECT SUM(beer_amount) as monthly_beer_amount
FROM [DATABASE].[TABLE] 
WHERE beer_sold_date BETWEEN '20110201' AND '20110228'

[ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ]

Также я считаю, что лучший способ организовать эту таблицу - это разделить эту таблицу на несколько других таблиц.Сохраните информацию о клиенте в первой таблице, например,

[customer_id, customer_name, date_in, date_out, room_type, room_number]. 
1, Bob, 20110101, 20110110, big, 200
2, Joe, 20110101, 20110110, small, 202
....

. И пусть другая таблица будет иметь имя, например room_items, которая будет иметь следующий вид:

[id, item_name]
1, BEER
2, BED
3, SNACK
...

А затем еще одна таблица с именем room_purchases, которая будет иметьследующее,

[customer_id, purchase_id, amount, date....]
1, 1, 10, 20110101
2, 3, 5, 20110101
3, 1, 9, 20110101
....

Это поможет вам объединить все три таблицы, и таким образом они будут более нормализованы.

SELECT SUM(t2.amount) as beer_amount
FROM customers as t1 
LEFT JOIN room_purchases as t2 ON t1.customer_id = t2.customer_id
WHERE t2.purchase_id = 1 AND t2.date BETWEEN 20110101 AND 20110131
...