У меня есть таблица, которая хранит идентификаторы и город, где хранилище расположено.
Я хочу перечислить все хранилища, запускающиеся с хранилищ, которые находятся в городе, где существует большинство хранилищ.
ТАБЛИЦА
ID CITY
1 NYC
2 BOS
3 BOS
4 NYC
5 NYC
Вывод, который я хочу, следующий, так как у меня есть большинство хранилищ в Нью-Йорк Сити, я хочу, чтобы весь район Нью-Йорк Сити был перечислен сначала.
1 NYC
4 NYC
5 NYC
2 BOS
3 BOS
Попробуйте:
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* for strncpy */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>
int
main()
{
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
/* I want to get an IPv4 IP address */
ifr.ifr_addr.sa_family = AF_INET;
/* I want IP address attached to "eth0" */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
/* display result */
printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
return 0;
}
Образец кода взят из здесь .
-121--958811-Возможно ли, что другой поток влияет на направление, передаваемое в Convert?
-121--3554071-Это решение не является оптимальным, поэтому, если ваша таблица очень большая, потребуется некоторое время для выполнения, но это делает то, что вы просите.
select c.city, c.id,
(select count(*) as cnt from city c2
where c2.city = c.city) as order_col
from city c
order by order_col desc
То есть для каждого города, с которым вы сталкиваетесь, вы подсчитываете количество раз, когда этот город появляется в базе данных.
Отказ от ответственности: Это дает то, что вы просите, но я бы не рекомендовал его для производственных сред, где количество строк будет расти слишком большим.
SELECT count(City), City
FROM table
GROUP BY City
ORDER BY count(City);
OR
SELECT count(City) as count, City
FROM table
GROUP BY City
ORDER BY count;
Ах, простите, я неправильно истолковал ваш вопрос. Я считаю, что ответ Питера Лангса был правильным.
Этот вычисляет счетчик в отдельном запросе, объединяет его и упорядочивает по этому счету ( SQL-Fiddle ):
SELECT c.id, c.city
FROM cities c
JOIN ( SELECT city, COUNT(*) AS cnt
FROM cities
GROUP BY city
) c2 ON ( c2.city = c.city )
ORDER BY c2.cnt DESC;