2017-01-04 44 views
0

如何才能在MySQL表上創建一個值爲0的列,除了最後一行將被標記爲1以外,還可以?將最後一行標記爲MySQL中的一列

例子:

真表:

+----+----------------------+ 
    | id | schedule_name  | 
    +----+----------------------+ 
    | 1 | Global Fee Schedule | 
    | 2 | CAT Fee Schedule  | 
    | 3 | Daily Fee Schedule | 
    | 4 | Daily Claim Schedule | 
    | 5 | Wind/Hail Schedule | 
    | 6 | Daily Claim Schedule | 
    | 7 | Daily Claims   | 
    | 8 | CAT Fee Schedule  | 
    | 9 | Daily Claims   | 
    | 10 | Daily Claims   | 
    +----+----------------------+ 

與添加的列:

+----+----------------------+-------------+ 
    | id | schedule_name  | last_column | 
    +----+----------------------+-------------+ 
    | 1 | Global Fee Schedule |   0 | 
    | 2 | CAT Fee Schedule  |   0 | 
    | 3 | Daily Fee Schedule |   0 | 
    | 4 | Daily Claim Schedule |   0 | 
    | 5 | Wind/Hail Schedule |   0 | 
    | 6 | Daily Claim Schedule |   0 | 
    | 7 | Daily Claims   |   0 | 
    | 8 | CAT Fee Scedule  |   0 | 
    | 9 | Daily Claims   |   0 | 
    | 10 | Daily Claims   |   1 | 
    +----+----------------------+-------------+ 
+0

您將新列的值定義爲「schedule_name」列中值的出現次數之和減去1. – arkascha

+0

*「如何在MySQL表上創建列的SELECT操作」* - 我不明白這一部分; 「創建」? –

+0

SELECT *,IF(公式我不知道)last_column從iascat_fee_categories LIMIT 10; – user1529918

回答

1

可以使用最多的功能。例如:

select *, id=(select max(id) from YOUR_TAB) as last_column from YOUR_TAB 
+0

這一個不適用LIMIT – user1529918

+0

最大的子查詢 - 選擇*,ID =選擇最大(id)從(從你的__限制5中選擇ID)T作爲從YOUR_TAB限制last_column 5 – meet

+0

仍然沒有JOY MAX顯然不關心限制 – user1529918

0

不知道爲什麼你應該需要這樣的東西。 但是,這是可能的,但不是很容易做到。

創建/插入數據

CREATE TABLE iascat_fee_categories 
    (`id` INT, `schedule_name` VARCHAR(20)) 
; 

INSERT INTO iascat_fee_categories 
    (`id`, `schedule_name`) 
VALUES 
    (1, 'Global Fee Schedule'), 
    (2, 'CAT Fee Schedule'), 
    (3, 'Daily Fee Schedule'), 
    (4, 'Daily Claim Schedule'), 
    (5, 'Wind/Hail Schedule'), 
    (6, 'Daily Claim Schedule'), 
    (7, 'Daily Claims'), 
    (8, 'CAT Fee Schedule'), 
    (9, 'Daily Claims'), 
    (10, 'Daily Claims') 
; 

該標記作爲LAST_COLUMN 1是相當複雜的選擇查詢。

選擇LIMIT 0,10

SELECT 
    iascat_fee_categories.id 
, iascat_fee_categories.schedule_name 
, IF((max_id_counts.max_sum_id_count + 0)= iascat_fee_categories.id, 1, 0) last_column 
FROM (
    SELECT 
    SUM(id_counts.id_count) max_sum_id_count 
    FROM (
    SELECT 
     COUNT(*) id_count 
    FROM 
     iascat_fee_categories 
    GROUP BY 
     iascat_fee_categories.id 
    LIMIT 0, 10 
) AS id_counts 
) AS max_id_counts 
CROSS JOIN 
    iascat_fee_categories 
LIMIT 0, 10 

輸出

id schedule_name   last_column 
------ -------------------- ------------- 
    1 Global Fee Schedule    0 
    2 CAT Fee Schedule     0 
    3 Daily Fee Schedule    0 
    4 Daily Claim Schedule    0 
    5 Wind/Hail Schedule    0 
    6 Daily Claim Schedule    0 
    7 Daily Claims      0 
    8 CAT Fee Schedule     0 
    9 Daily Claims      0 
    10 Daily Claims      1 

但是,如果你想選擇LIMIT 1,10選擇查詢的變化。 請注意,您還需要這部分更新IF((max_id_counts.max_sum_id_count + 0)IF((max_id_counts.max_sum_id_count + 1) 而ofcource兩個限位聲明

,並選擇LIMIT 2,10你所需要的變革,要IF((max_id_counts.max_sum_id_count + 2) 而ofcource兩個限位聲明

SELECT LIMIT 1,10

SELECT 
    Table1.id 
, Table1.schedule_name 
, IF((max_id_counts.max_sum_id_count + 1)= iascat_fee_categories.id, 1, 0) last_column 
FROM (
    SELECT 
    SUM(id_counts.id_count) max_sum_id_count 
    FROM (
    SELECT 
     COUNT(*) id_count 
    FROM 
     iascat_fee_categories 
    GROUP BY 
     Table1.id 
    LIMIT 1, 10 
) AS id_counts 
) AS max_id_counts 
CROSS JOIN 
    iascat_fee_categories 
LIMIT 1, 10 

輸出

id schedule_name   last_column 
------ -------------------- ------------- 
    2 CAT Fee Schedule     0 
    3 Daily Fee Schedule    0 
    4 Daily Claim Schedule    0 
    5 Wind/Hail Schedule    0 
    6 Daily Claim Schedule    0 
    7 Daily Claims      0 
    8 CAT Fee Schedule     0 
    9 Daily Claims      0 
    10 Daily Claims      1 
相關問題