2016-08-25 12 views
3

Мне нужны имена столбцов в таблице, которая является тремя верхними столбцами с самым высоким счетом.Извлечение столбцов Имена таблицы для столбцов с верхним числом 3

Я использую MySql:

Я был в состоянии получить количество требуемых столбцов с помощью этого запроса:

SELECT 
COUNT(unsafe_spaces_home) AS AH , 
COUNT(unsafe_spaces_school) AS SCH , 
COUNT(unsafe_spaces_market_place) AS MP , 
COUNT(unsafe_spaces_field_or_playground) AS PG , 
COUNT(unsafe_spaces_dumping_ground) AS DG , 
COUNT(unsafe_spaces_railway_station) AS RS , 
COUNT(unsafe_spaces_route_to_toilet) AS RT , 
COUNT(unsafe_spaces_toilet) AS ST , 
COUNT(unsafe_spaces_well_or_water_pump) AS WT , 
COUNT(unsafe_spaces_river_pond) AS RP , 
COUNT(unsafe_spaces_sewer) AS SS 
FROM formdata 

я получаю результат следующим образом:

AH SCH MP PG DG RS RT ST WT RP SS 
=========================================== 
0 0 12 1 7 16 2 9 0 9 1 

Однако Мне нужен нужный результат:

top_3_columns 
================ 
    RS,MP,ST 

Как я могу это достичь?

+0

Почему вы хотите ST, но не RP? – jarlh

+0

Я просто пытался показать иллюстрацию для моего примера, я могу иметь ST или RP, но только столбцы с тремя верхними подсчетами – Mufaddal

+0

Итак, вы также можете иметь как ST, так и RP? (Оба имеют три первых счета.) – jarlh

ответ

1

Рассмотрим имена столбцов, как а, б, в, г, е Тогда вы можете использовать следующий запрос

select tagName, value from 
(select 'a' tagName, count(a) value from formdata UNION 
select 'b' tagName, count(b) value from formdata UNION 
select 'c' tagName, count(c) value from formdata UNION 
select 'd' tagName, count(d) value from formdata UNION 
select 'e' tagName, count(e) value from formdata 
) 
as results 
order by value desc 
limit 3; 
+0

Perfect ... Это точно, как я использовал .... Работает как шарм .... Спасибо .... – Mufaddal